SnowConvert AI - BigQuery - CREATE TABLE¶
文法構文¶
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] TABLE [ IF NOT EXISTS ]
table_name
[(
column | constraint_definition[, ...]
)]
[DEFAULT COLLATE collate_specification]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]
サンプルソースパターン¶
DEFAULT に COLLATE¶
BigQuery¶
CREATE TABLE table1 (
col1 STRING
)
DEFAULT COLLATE 'und:ci';
Snowflake¶
CREATE TABLE table1 (
col1 STRING
)
DEFAULT_DDL_COLLATION='und-ci';
ラベルテーブルオプション¶
BigQuery¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
OPTIONS(
labels=[("org_unit", "development")]
);
Snowflake¶
CREATE TAG IF NOT EXISTS "org_unit";
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
WITH TAG( "org_unit" = "development" )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "04/09/2025", "domain": "test" }}'
;
説明テーブルオプション¶
BigQuery¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
OPTIONS(
description = 'My table comment'
);
Snowflake¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
COMMENT = '{ "description": "My table comment", "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "04/09/2025", "domain": "test" }}'
;
説明テーブルオプション¶
BigQuery¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
OPTIONS(
friendly_name = 'Some_table'
);
Snowflake¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
COMMENT = '{ "friendly_name": "Some_table", "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "04/09/2025", "domain": "test" }}'
;
既知の問題¶
1.サポートされていないテーブルオプション
Snowflakeではすべてのテーブルオプションがサポートされているわけではありません。OPTIONS 句でサポートされていないテーブルオプションが検出されると、これについて警告する EWI が生成されます。
BigQuery¶
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
OPTIONS(
expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
partition_expiration_days=1,
description="a table that expires in 2025, with each partition living for 24 hours",
labels=[("org_unit", "development")]
);
Snowflake¶
CREATE TAG IF NOT EXISTS "org_unit";
CREATE TABLE table1
(
col1 INT,
col2 DATE
)
WITH TAG( "org_unit" = "development" )
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0001 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: EXPIRATION_TIMESTAMP, PARTITION_EXPIRATION_DAYS. ***/!!!
OPTIONS(
expiration_timestamp=TIMESTAMP "2025-01-01 00:00:00 UTC",
partition_expiration_days=1
)
COMMENT = '{ "description": "a table that expires in 2025, with each partition living for 24 hours", "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "bigquery", "convertedOn": "04/09/2025", "domain": "test" }}'
;
2.マイクロパーティショニングはSnowflakeによって自動的に管理されます
Snowflakeはデータの自動パーティショニングを実行します。ユーザー定義のパーティショニングはサポートされていません。
BigQuery¶
CREATE TABLE table1(
transaction_id INT,
transaction_date DATE
)
PARTITION BY transaction_date;
Snowflake¶
CREATE TABLE table1 (
transaction_id INT,
transaction_date DATE
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0002 - MICRO-PARTITIONING IS AUTOMATICALLY PERFORMED ON ALL SNOWFLAKE TABLES. ***/!!!
PARTITION BY transaction_date;
COLUMN DEFINITION¶
文法構文¶
column :=
column_name column_schema
column_schema :=
{
simple_type
| STRUCT<field_list>
| ARRAY<array_element_schema>
}
[PRIMARY KEY NOT ENFORCED | REFERENCES table_name(column_name) NOT ENFORCED]
[DEFAULT default_expression]
[NOT NULL]
[OPTIONS(column_option_list)]
simple_type :=
{ data_type | STRING COLLATE collate_specification }
field_list :=
field_name column_schema [, ...]
array_element_schema :=
{ simple_type | STRUCT<field_list> }
[NOT NULL]
サンプルソースパターン¶
説明オプション¶
BigQuery¶
CREATE TABLE table1 (
col1 VARCHAR(20) OPTIONS(description="A repeated STRING field")
);
Snowflake¶
CREATE TABLE table1 (
col1 VARCHAR(20) COMMENT = 'A repeated STRING field'
);
COLLATE¶
BigQuery¶
CREATE TABLE table1 (
col1 STRING COLLATE 'und:ci'
);
Snowflake¶
CREATE TABLE table1 (
col1 STRING COLLATE 'und-ci'
);
既知の問題¶
1.丸めモードはサポートされていません
Snowflakeでは、列のデフォルトの丸めモードの指定はサポートしていません。
BigQuery¶
CREATE TABLE table1 (
col1 STRING OPTIONS(rounding_mode = "ROUND_HALF_EVEN")
);
Snowflake¶
CREATE TABLE table1 (
col1 STRING
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0001 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: ROUNDING_MODE. ***/!!!
OPTIONS(
rounding_mode = "ROUND_HALF_EVEN"
)
)
関連 EWIs¶
[SSC-EWI-BQ0001](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/bigqueryEWI.md#ssc-ewi-bq0001):Snowflakeはオプション句をサポートしていません。
CREATE EXTERNAL TABLE¶
説明¶
外部テーブルを使用すると、BigQuery は BigQuery ストレージの外部に保存されているデータをクエリできます。([BigQuery SQL 言語リファレンス CREATE EXTERNAL TABLE](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_external_table_statement))
構文
CREATE [ OR REPLACE ] EXTERNAL TABLE [ IF NOT EXISTS ] table_name
[(
column_name column_schema,
...
)]
[WITH CONNECTION {connection_name | DEFAULT}]
[WITH PARTITION COLUMNS
[(
partition_column_name partition_column_type,
...
)]
]
OPTIONS (
external_table_option_list,
...
);
BigQuery の CREATE EXTERNAL TABLE ステートメントは[Snowflake](https://docs.snowflake.com/en/sql-reference/sql/create-external-table)の CREATE EXTERNAL TABLE ステートメントに変換されますが、この変換にはユーザーの介入が必要です。
SnowConvert AI によって実行される変換を完了するには、ファイルが配置されている外部ソースにアクセスできる[ストレージ統合](https://docs.snowflake.com/en/sql-reference/sql/create-storage-integration)、外部ステージ、(オプションで)[通知統合](https://docs.snowflake.com/en/sql-reference/sql/create-notification-integration)を定義する必要があります。各プロバイダーの接続の設定方法については、以下のガイドをご参照ください。
[Amazon S3を参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-s3)
[Google Cloud Storageを参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-gcs)
[Azure Blob Storageを参照する外部テーブルの場合](https://docs.snowflake.com/ja/user-guide/tables-external-azure)
このページで紹介されている変換に関する重要な考慮事項:
@EXTERNAL_STAGE プレースホルダーは、前のガイドに従って作成された外部ステージに置き換える必要があります。
外部ステージはバケットのルートを指すものと想定されています。各テーブルに対して生成される PATTERN 句は、バケットの基点から始まるファイル/フォルダーのパスを指定しているため、バケット内の別の場所を指す外部ステージを定義すると、望ましくない動作が発生する可能性があるため、この点を考慮することが重要です。
AUTO_REFRESH = FALSE句はエラーを回避するために生成されます。外部テーブルメタデータの自動更新は、Snowflakeアカウントのクラウドプロバイダーとバケットプロバイダーが同じで、通知統合が作成された場合にのみ有効であることに注意してください。
サンプルソースパターン¶
明示的な列リストがある CREATE EXTERNAL TABLE¶
列リストが指定されている場合、 SnowConvert AI はファイルの値を抽出するために、各列の AS 式列オプションを自動的に生成します。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
Employee_id INTEGER,
Name STRING,
Mail STRING,
Position STRING,
Salary INTEGER
)
OPTIONS(
FORMAT='CSV',
SKIP_LEADING_ROWS=1,
URIS=['gs://sc_external_table_bucket/folder_with_csv/Employees.csv']
);
Snowflake¶
CREATE OR REPLACE EXTERNAL TABLE test.Employees_test
(
Employee_id INTEGER AS CAST(GET_IGNORE_CASE($1, 'c1') AS INTEGER),
Name STRING AS CAST(GET_IGNORE_CASE($1, 'c2') AS STRING),
Mail STRING AS CAST(GET_IGNORE_CASE($1, 'c3') AS STRING),
Position STRING AS CAST(GET_IGNORE_CASE($1, 'c4') AS STRING),
Salary INTEGER AS CAST(GET_IGNORE_CASE($1, 'c5') AS INTEGER)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Employees.csv'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER =1);
明示的な列リストがない CREATE EXTERNAL TABLE¶
列リストが提供されない場合、 BigQuery は自動的にファイル構造からカラムのスキーマを検出します。この動作を再現するために、 SnowConvert AI は[INFER_SCHEMA](https://docs.snowflake.com/en/sql-reference/functions/infer_schema)関数を使用して列定義を生成する USING TEMPLATE 句を生成します。
INFERSCHEMA 関数を動作させるにはファイル形式が必要なため、 SnowConvert AI はこの目的のために一時ファイル形式を生成します。このファイル形式は CREATE EXTERNAL TABLE ステートメントを実行するときにのみ必要であり、セッションが終了すると自動的に削除されます。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json
OPTIONS(
FORMAT='JSON',
URIS=['gs://sc_external_table_bucket/folder_with_json/Cars.jsonl']
);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_JSON_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/folder_with_json/Cars.jsonl', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_JSON_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_json/Cars.jsonl'
FILE_FORMAT = (TYPE = JSON);
複数の URIs を含む CREATE EXTERNAL TABLE¶
複数のソース URIs が指定されている場合、それらはSnowflakeの PATTERN 句の正規表現に結合されます。使用されるワイルドカード * 文字はSnowflakeではそれに相当する .* に変換されます。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.multipleFilesTable
(
Name STRING,
Code STRING,
Price NUMERIC,
Expiration_date DATE
)
OPTIONS(
format="CSV",
skip_leading_rows = 1,
uris=['gs://sc_external_table_bucket/folder_with_csv/Food.csv', 'gs://sc_external_table_bucket/folder_with_csv/other_products/*']
);
Snowflake¶
CREATE OR REPLACE EXTERNAL TABLE test.multipleFilesTable
(
Name STRING AS CAST(GET_IGNORE_CASE($1, 'c1') AS STRING),
Code STRING AS CAST(GET_IGNORE_CASE($1, 'c2') AS STRING),
Price NUMERIC AS CAST(GET_IGNORE_CASE($1, 'c3') AS NUMERIC),
Expiration_date DATE AS CAST(GET_IGNORE_CASE($1, 'c4') AS DATE)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Food.csv|folder_with_csv/other_products/.*'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
WITH CONNECTION 句¶
接続情報はすでにストレージ統合を使用してSnowflakeに提供されているため、WITH CONNECTION 句は削除されます。
BigQuery¶
CREATE EXTERNAL TABLE test.awsTable
WITH CONNECTION `aws-us-east-1.s3-read-connection`
OPTIONS (
format="JSON",
uris=["s3://s3-bucket/json_files/example.jsonl"]
);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_AWSTABLE_FORMAT
TYPE = JSON;
CREATE EXTERNAL TABLE test.awsTable USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/json_files/example.jsonl', FILE_FORMAT => 'SC_TEST_AWSTABLE_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS s3://s3-bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'json_files/example.jsonl'
FILE_FORMAT = (TYPE = JSON);
対応テーブルオプション¶
以下の外部テーブルオプションは、Snowflakeでサポートされており、 SnowConvert AI によって変換されます。
FORMAT
ENCODING
SKIP_LEADING_ROWS
FIELD_DELIMITER
COMPRESSION
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.songs_test
(
Name STRING,
Release_date INTEGER,
Songs INT,
Genre STRING
)
OPTIONS(
FORMAT='CSV',
ENCODING='UTF-8',
SKIP_LEADING_ROWS=1,
FIELD_DELIMITER='|',
COMPRESSION='GZIP',
URIS=['gs://sc_external_table_bucket/folder_with_csv/Albums.csv']
);
Snowflake¶
CREATE OR REPLACE EXTERNAL TABLE test.songs_test
(
Name STRING AS CAST(GET_IGNORE_CASE($1, 'c1') AS STRING),
Release_date INTEGER AS CAST(GET_IGNORE_CASE($1, 'c2') AS INTEGER),
Songs INT AS CAST(GET_IGNORE_CASE($1, 'c3') AS INT),
Genre STRING AS CAST(GET_IGNORE_CASE($1, 'c4') AS STRING)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Albums.csv'
FILE_FORMAT = (TYPE = CSV
ENCODING= 'UTF8' SKIP_HEADER =1
FIELD_DELIMITER='|'
COMPRESSION= GZIP);
既知の問題¶
1. 明示的な列リストと CSV ファイル形式のない CREATE EXTERNAL TABLE
現在、Snowflake外部テーブルは CSV ファイルのヘッダーの解析をサポートしていません。明示的な列リストと CSV ファイル形式のない外部テーブルが見つかった場合、 SnowConvert AI は実行時エラーを回避するために SKIP_HEADER ファイル形式オプションを生成しますが、この場合、テーブル列名は自動生成された名前c1、c2、...、cNが付きます。
FDM が生成され、ヘッダーが解析できないこと、そして名前を保持するために列の名前を手動で変更する必要があることを通知します。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_csv
OPTIONS(
FORMAT='CSV',
URIS=['gs://sc_external_table_bucket/folder_with_csv/Employees.csv']
);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_CSV_FORMAT
TYPE = CSV
SKIP_HEADER = 1;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_csv
--** SSC-FDM-BQ0005 - PARSING THE CSV HEADER IS NOT SUPPORTED IN EXTERNAL TABLES, COLUMNS MUST BE RENAMED TO MATCH THE ORIGINAL NAMES **
USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/folder_with_csv/Employees.csv', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_CSV_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_csv/Employees.csv'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
2.グーグルドライブのソースを参照する外部テーブル
SnowflakeはGoogle Driveにホストされているファイルからのデータ読み込みをサポートしていません。このことを通知し、ファイルをバケットにアップロードして外部ステージ経由でアクセスするように要求する FDM が生成されます。
PATTERN 句には、自動生成されたプレースホルダー FILE_PATH0、FILE_PATH1、...、FILE_PATHN が格納されます。このプレースホルダーは、ファイルが外部の場所に移動された後にファイル/フォルダーのパスに置き換えられます。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_drive_test
OPTIONS(
FORMAT='JSON',
URIS=['https://drive.google.com/open?id=someFileId']
);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_DRIVE_TEST_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_drive_test USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-BQ0008 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_DRIVE_TEST_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS A EXTERNAL LOCATION, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
--** SSC-FDM-BQ0006 - READING FROM GOOGLE DRIVE IS NOT SUPPORTED IN SNOWFLAKE, UPLOAD THE FILES TO THE EXTERNAL LOCATION AND REPLACE THE FILE_PATH PLACEHOLDERS **
PATTERN = 'FILE_PATH0'
FILE_FORMAT = (TYPE = JSON);
3.GOOGLE_SHEETS ファイル形式の外部テーブル
Snowflakeはファイル形式としてGoogle Sheetsをサポートしていませんが、その構造はSnowflakeがサポートしている CSV ファイルに似ています。
SnowConvert AI が GOOGLE_SHEETS 形式の外部テーブルを検出すると、代わりに CSV ファイル形式の外部テーブルを生成します。
GoogleシートはGoogleドライブに保存されているので、前号で説明したように、ファイルを CSV として外部の場所にアップロードし、 PATTERN 句でファイルパスを指定する必要があります。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.spreadsheetTable
(
Name STRING,
Code INTEGER,
Price INTEGER,
Expiration_date DATE
)
OPTIONS(
format="GOOGLE_SHEETS",
skip_leading_rows = 1,
uris=['https://docs.google.com/spreadsheets/d/someFileId/edit?usp=sharing']
);
Snowflake¶
--** SSC-FDM-BQ0007 - READING FROM SPREADSHEETS IS NOT SUPPORTED IN SNOWFLAKE, USE THE CSV FILE TYPE INSTEAD **
CREATE OR REPLACE EXTERNAL TABLE test.spreadsheetTable
(
Name STRING AS CAST(GET_IGNORE_CASE($1, 'c1') AS STRING),
Code INTEGER AS CAST(GET_IGNORE_CASE($1, 'c2') AS INTEGER),
Price INTEGER AS CAST(GET_IGNORE_CASE($1, 'c3') AS INTEGER),
Expiration_date DATE AS CAST(GET_IGNORE_CASE($1, 'c4') AS DATE)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS A EXTERNAL LOCATION, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
--** SSC-FDM-BQ0006 - READING FROM GOOGLE DRIVE IS NOT SUPPORTED IN SNOWFLAKE, UPLOAD THE FILES TO THE EXTERNAL LOCATION AND REPLACE THE FILE_PATH PLACEHOLDERS **
PATTERN = 'FILE_PATH0'
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1);
4.サポートされていないファイル形式の外部テーブル
Snowflakeは、次の BigQuery 形式をサポートしています。
BigQuery |
Snowflake |
|---|---|
AVRO |
AVRO |
CSV |
CSV |
NEWLINE_DELIMITED_JSON |
JSON |
ORC |
ORC |
PARQUET |
PARQUET |
その他のフォーマットはサポート外と表示されます。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
format = 'DATASTORE_BACKUP',
uris = ['gs://backup_bucket/backup_folder/*']
);
Snowflake¶
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0013 - EXTERNAL TABLE DATA FORMAT NOT SUPPORTED IN SNOWFLAKE ***/!!!
CREATE OR REPLACE EXTERNAL TABLE test.backup_restore_table
OPTIONS (
format = 'DATASTORE_BACKUP',
uris = ['gs://backup_bucket/backup_folder/*']
);
5.Hiveでパーティション化された外部テーブル
SnowflakeはHiveでパーティション化された外部テーブルをサポートしていないため、 WITH PARTITION COLUMNS 句はサポート外としてマークされます。
BigQuery¶
CREATE EXTERNAL TABLE test.CustomHivePartitionedTable
WITH PARTITION COLUMNS (
field_1 STRING,
field_2 INT64)
OPTIONS (
uris = ['gs://sc_external_table_bucket/folder_with_parquet/*'],
format = 'PARQUET',
hive_partition_uri_prefix = 'gs://sc_external_table_bucket/folder_with_parquet',
require_hive_partition_filter = false);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_CUSTOMHIVEPARTITIONEDTABLE_FORMAT
TYPE = PARQUET;
CREATE EXTERNAL TABLE test.CustomHivePartitionedTable USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-BQ0008 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_CUSTOMHIVEPARTITIONEDTABLE_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0014 - HIVE PARTITIONED EXTERNAL TABLES ARE NOT SUPPORTED IN SNOWFLAKE ***/!!!
WITH PARTITION COLUMNS (
field_1 STRING,
field_2 INT64)
PATTERN = 'folder_with_parquet/.*'
FILE_FORMAT = (TYPE = PARQUET)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0001 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: HIVE_PARTITION_URI_PREFIX, REQUIRE_HIVE_PARTITION_FILTER. ***/!!!
OPTIONS(
hive_partition_uri_prefix = 'gs://sc_external_table_bucket/folder_with_parquet',
require_hive_partition_filter = false
);
6.列リストのない外部テーブルで、 INFER_SCHEMA 関数に有効なファイル URI がありません
INFER_SCHEMA 関数には、テーブル列の構築に使用するファイルまたはフォルダへのパスを指定する LOCATION パラメータが必要ですが、このパスは正規表現をサポートしていないため、ワイルドカード * 文字はサポートされていません。
テーブルに列がない場合、 SnowConvert AI はすべての URIS をチェックして、ワイルドカードを使用していないものを見つけ、INFER _SCHEMA 関数で使用します。このような条件を満たす URI がない場合、 FDM と FILE _PATH プレースホルダーが生成されます。このプレースホルダーは、テーブル列を生成するために外部テーブルによって参照されるファイルの1つのパスに置き換える必要があります。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2
OPTIONS(
FORMAT='JSON',
URIS=['gs://sc_external_table_bucket/folder_with_json/*']
);
Snowflake¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT
TYPE = JSON;
CREATE OR REPLACE EXTERNAL TABLE test.my_external_table_json2 USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-BQ0008 - THE INFER_SCHEMA FUNCTION REQUIRES A FILE PATH WITHOUT WILDCARDS TO GENERATE THE TABLE TEMPLATE, REPLACE THE FILE_PATH PLACEHOLDER WITH IT **
TABLE(INFER_SCHEMA(LOCATION => '@EXTERNAL_STAGE/FILE_PATH', FILE_FORMAT => 'SC_TEST_MY_EXTERNAL_TABLE_JSON2_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://sc_external_table_bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'folder_with_json/.*'
FILE_FORMAT = (TYPE = JSON);
7.サポートされていないテーブルオプション
[サポートされているテーブルオプション](bigquery-create-table.md#supported-table-options)パターンに記載されていないその他のテーブルオプションは、サポート外としてマークされます。
BigQuery¶
CREATE OR REPLACE EXTERNAL TABLE dataset.CsvTable
(
x INTEGER,
y STRING
)
OPTIONS (
format = 'CSV',
uris = ['gs://bucket/example.csv'],
field_delimiter = '|',
max_bad_records = 5
);
Snowflake¶
CREATE OR REPLACE EXTERNAL TABLE dataset.CsvTable
(
x INTEGER AS CAST(GET_IGNORE_CASE($1, 'c1') AS INTEGER),
y STRING AS CAST(GET_IGNORE_CASE($1, 'c2') AS STRING)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0015 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs://bucket, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = 'example.csv'
FILE_FORMAT = (TYPE = CSV
field_delimiter = '|')
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0001 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: MAX_BAD_RECORDS. ***/!!!
OPTIONS(
max_bad_records = 5
);
関連 EWIs¶
[SSC-EWI-BQ0013](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/bigqueryEWI.md#ssc-ewi-bq0013):snowflakeでサポートされていない外部テーブルデータ形式
[SSC-EWI-BQ0014](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/bigqueryEWI.md#ssc-ewi-bq0014):Hiveパーティション外部テーブルは、Snowflakeではサポートされていません。
[SSC-EWI-BQ0015](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/bigqueryEWI.md#ssc-ewi-bq0015):外部テーブルでは、外部の場所にアクセスするために外部ステージが必要です。 EXTERNAL_STAGE プレースホルダーを定義して置き換えてください
[SSC-FDM-BQ0004](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0004):INFER_SCHEMA 関数では、表テンプレートを生成するためにワイルドカードを含まないファイルパスが必要です。 FILE_PATH プレースホルダーをそれに置き換えてください。
[SSC-FDM-BQ0005](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0005):外部テーブルでは CSV ヘッダーの解析はサポートされていないため、列の名前を元の名前と一致するように変更する必要があります
[SSC-FDM-BQ0006](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0006):Googleドライブからの読み込みはSnowflakeではサポートされていません。ファイルを外部の場所にアップロードし、 FILE_PATH プレースホルダーを置き換えてください。
[SSC-FDM-BQ0007](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0007):Snowflakeではスプレッドシートからの読み込みはサポートされていません。代わりに CSV ファイルタイプを使用してください。
CREATE TABLE CLONE¶
文法構文¶
CREATE TABLE [ IF NOT EXISTS ]
destination_table_name
CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression]
...
[OPTIONS(table_option_list)]
サンプルソースパターン¶
FOR SYSTEM TIME AS OF¶
BigQuery¶
CREATE TABLE my_clone_table
CLONE some_table_name2
FOR SYSTEM_TIME AS OF TIMESTAMP "2025-01-01 00:00:00 UTC";
Snowflake¶
CREATE TABLE my_clone_table
CLONE some_table_name2 AT (TIMESTAMP => TIMESTAMP "2025-01-01 00:00:00 UTC");
::{note} CREATE TABLE CLONE ステートメントの LABELS オプションは TAGs に変換されません。これは、ソーステーブルの TAGs がコピーされるためであり、テーブルのコピー中に変更することはできません。他のテーブルオプションの変換は、[CREATE TABLE](./bigquery-create-table.md#labels-table-option)ステートメントに指定されているものと同じです。
CREATE TABLE COPY
Grammar syntax
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ] table_name
COPY source_table_name
...
[OPTIONS(table_option_list)]
Sample Source Patterns
一般的なケース
Snowflakeの CREATE TABLE CLONE は機能的に CREATE TABLE COPY と同等です。
入力コード
BigQuery
CREATE TABLE newtable
COPY sourceTable;
Snowflake
CREATE TABLE newtable CLONE sourceTable;
注釈
CREATE TABLE COPY ステートメントの LABELS オプションは、ソーステーブルの TAGs がコピーされるため、テーブルのコピー中に変更できず、TAGs に変換されません。その他のテーブルオプションの変換は、[CREATE TABLE](bigquery-create-table.md#labels-table-option)ステートメントで指定されているものと同じです。
CREATE TABLE LIKE¶
文法構文¶
CREATE [ OR REPLACE ] TABLE [ IF NOT EXISTS ]
table_name
LIKE [[project_name.]dataset_name.]source_table_name
...
[OPTIONS(table_option_list)]
Success
CREATE TABLE LIKE は Snowflakeによって完全にサポートされています。
注釈
CREATE TABLE LIKE ステートメントの LABELS オプションは、ソーステーブルの TAGs がコピーされるため、テーブルのコピー中に変更できず、TAGs に変換されません。その他のテーブルオプションの変換は、[CREATE TABLE](bigquery-create-table.md#labels-table-option)ステートメントで指定されているものと同じです。
CREATE TABLE SNAPSHOT¶
文法構文¶
CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] table_snapshot_name
CLONE source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]
サンプルソースパターン¶
一般的なケース¶
SnowflakeではSnapshotキーワードが削除され、テーブルは CREATE TABLE CLONE に変換されます。
スナップショットとクローンの2つの違いは、スナップショットは編集できず、通常は有効期限があることです。有効期限はサポートされていません。これは、[CREATE TABLE](bigquery-create-table.md#labels-table-option)ステートメントのサポートされていないオプションで指定されているとおりに処理されます。
BigQuery¶
CREATE SNAPSHOT TABLE mytablesnapshot
CLONE mytable;
Snowflake¶
CREATE TABLE mytablesnapshot CLONE mytable;
FOR SYSTEM TIME AS OF¶
BigQuery¶
CREATE SNAPSHOT TABLE IF NOT EXISTS my_snapshot_table2
CLONE some_table_name2
FOR SYSTEM_TIME AS OF TIMESTAMP "2025-01-01 00:00:00 UTC";
Snowflake¶
CREATE TABLE IF NOT EXISTS my_snapshot_table2
CLONE some_table_name2 AT (TIMESTAMP => TIMESTAMP "2025-01-01 00:00:00 UTC");
注釈
CREATE TABLE COPY ステートメントの LABELS オプションは、ソーステーブルの TAGs がコピーされるため、テーブルのコピー中に変更できず、 TAGs に変換されません。
その他のテーブルオプションの変換は、[CREATE TABLE](bigquery-create-table.md#labels-table-option)ステートメントで指定されているものと同じです。