SnowConvert AI – BigQuery – CREATE TABLE¶
Grammatikalische Syntax¶
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]
Beispielhafte Quellcode-Muster¶
DEFAULT-COLLATE¶
BigQuery¶
CREATE TABLE table1 (
col1 STRING
)
DEFAULT COLLATE 'und:ci';
Snowflake¶
CREATE TABLE table1 (
col1 STRING
)
DEFAULT_DDL_COLLATION='und-ci';
Labels – Tabellenoption¶
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" }}'
;
Beschreibung – Tabellenoption¶
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" }}'
;
Beschreibung – Tabellenoption¶
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" }}'
;
Bekannte Probleme¶
1. Nicht unterstützte Tabellenoptionen
Nicht alle Tabellenoptionen werden in Snowflake unterstützt. Wenn in einer OPTIONS-Klausel eine nicht unterstützte Tabellenoption auftritt, wird ein EWI generiert, um darauf hinzuweisen.
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. Die Mikropartitionierung wird automatisch von Snowflake verwaltet
Snowflake führt eine automatische Partitionierung der Daten durch. Die benutzerdefinierte Partitionierung wird nicht unterstützt.
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¶
Grammatikalische Syntax¶
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]
Beispielhafte Quellcode-Muster¶
Beschreibung – Option¶
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'
);
Bekannte Probleme¶
1. Rundungsmodus nicht unterstützt
Snowflake unterstützt nicht die Angabe eines Standard-Rundungsmodus für Spalten.
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"
)
)
Zugehörige EWIs¶
SSC-EWI-BQ0001: Snowflake unterstützt die OPTIONS-Klausel nicht.
CREATE EXTERNAL TABLE¶
Beschreibung¶
Externe Tabellen erlauben BigQuery das Abfragen von Daten, die außerhalb des BigQuery-Speichers gespeichert sind (BigQuery SQL Language Reference CREATE EXTERNAL TABLE)
Syntax
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,
...
);
Die CREATE EXTERNAL TABLE Anweisung von BigQuery wird in eine CREATE EXTERNAL TABLE-Anweisung von Snowflake umgewandelt, diese Transformation erfordert jedoch einen Benutzereingriff.
Um die von SnowConvert AI durchgeführte Transformation abzuschließen, ist es notwendig, eine Speicherintegration, einen externen Speicherbereich und (optional) eine Benachrichtigungsintegration zu definieren, die Zugriff auf die externe Quelle haben, in der sich Dateien befinden. Beachten Sie die folgenden Anleitungen zum Einrichten der Verbindung für jeden Anbieter:
Wichtige Hinweise zu den auf dieser Seite gezeigten Transformationen:
Der @EXTERNAL_STAGE-Platzhalter muss durch den externen Stagingbereich ersetzt werden, der anhand der vorherigen Anleitung erstellt wurde.
Es wird davon ausgegangen, dass der externe Stagingbereich auf das Rootverzeichnis des Buckets verweist. Dies muss berücksichtigt werden, da die PATTERN-Klausel, die für jede Tabelle generiert wird, die Datei-/Ordnerpfade angibt, die an der Basis des Buckets beginnen. Wenn der externe Stagingbereich auf einen anderen Speicherort im Bucket verweist, kann dies zu unerwünschtem Verhalten führen.
Die
AUTO_REFRESH = FALSE-Klausel wird generiert, um Fehler zu vermeiden. Beachten Sie, dass die automatische Aktualisierung der Metadaten externer Tabellen nur gültig ist, wenn der Cloudanbieter Ihres Snowflake-Kontos und der Bucket-Anbieter identisch sind und eine Benachrichtigungsintegration erstellt wurde.
Beispielhafte Quellcode-Muster¶
CREATE EXTERNAL TABLE mit expliziter Spaltenliste¶
Wenn die Spaltenliste bereitgestellt wird, generiert SnowConvert AI automatisch die AS-Ausdrucksspaltenoptionen für jede Spalte, um die Dateiwerte zu extrahieren.
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 ohne explizite Spaltenliste¶
Wenn die Spaltenliste nicht angegeben wird, erkennt BigQuery automatisch das Schema der Spalten aus der Dateistruktur. Um dieses Verhalten zu replizieren, generiert SnowConvert AI eine USING TEMPLATE-Klausel, die die INFER_SCHEMA](https://docs.snowflake.com/en/sql-reference/functions/infer_schema)-Funktion verwendet, um die Spaltendefinitionen zu generieren.
Da die INFER_SCHEMA-Funktion ein Dateiformat benötigt, um zu funktionieren, generiert SnowConvert AI ein temporäres Dateiformat für diesen Zweck. Dieses Dateiformat wird nur benötigt, wenn Sie die CREATE EXTERNAL TABLE-Anweisung ausführen, und wird bei Beenden der Sitzung automatisch gelöscht.
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);
CREATE EXTERNAL TABLE mit mehreren URIs¶
Wenn mehrere Quell-URIs angegeben sind, werden sie im regulären Ausdruck (Regex) der PATTERN-Klausel in Snowflake verknüpft. Die verwendeten *-Platzhalterzeichen werden in ihr .*-Äquivalent in Snowflake umgewandelt.
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-Klausel.¶
Die WITH CONNECTION-Klausel wird entfernt, da die Verbindungsinformationen Snowflake bereits über die Speicherintegration zur Verfügung gestellt wurden.
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);
Unterstützte Tabellenoptionen¶
Die folgenden externen Tabellenoptionen werden in Snowflake unterstützt und von SnowConvert AI transformiert:
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);
Bekannte Probleme¶
1 CREATE EXTERNAL TABLE ohne explizite Spaltenliste und CSV-Dateiformat
Derzeit unterstützen externe Snowflake-Tabellen nicht das Parsen des Headers von CSV-Dateien. Wenn eine externe Tabelle ohne explizite Spaltenliste und CSV-Dateiformat gefunden wurde, erzeugt SnowConvert AI die SKIP_HEADER-Dateiformatoption, um Laufzeitfehler zu vermeiden. Dies führt jedoch dazu, dass die Spaltennamen der Tabelle automatisch die generierten Namen c1, c2, …, cN haben.
Es wird eine FDM generiert, die darauf hinweist, dass der Header nicht geparst werden kann und dass die Spalten manuell umbenannt werden müssen, um die Namen beizubehalten.
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. Externe Tabellen, die Google Drive-Quellen referenzieren
Snowflake unterstützt nicht das Lesen von Daten aus Dateien, die auf Google Drive gespeichert sind. Es wird eine FDM generiert, um darüber zu informieren und aufzufordern, die Dateien in den Bucket hochzuladen und über den externen Stagingbereich darauf zuzugreifen.
Die PATTERN-Klausel enthält automatisch generierte Platzhalter FILE_PATH0, FILE_PATH1, …, FILE_PATHN, die nach dem Verschieben der Dateien an den externen Speicherort durch die tatsächlichen Datei- oder Ordnerpfade ersetzt werden müssen.
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. Externe Tabellen mit dem GOOGLE_SHEETS-Dateiformat
Snowflake unterstützt Google Sheets nicht als Dateiformat, deren Struktur jedoch ähnlich ist wie CSV-Dateien, die von Snowflake unterstützt werden.
Wenn SnowConvert AI eine externe Tabelle erkennt, die das GOOGLE_SHEETS-Format verwendet, wird stattdessen eine externe Tabelle mit dem CSV-Dateiformat erstellt.
Da Google Sheets in Google Drive gespeichert sind, wäre es notwendig, die Dateien als CSV in den externen Speicherort hochzuladen die Dateipfade in der PATTERN-Klausel anzugeben, wie für das vorherige Problem erwähnt.
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. Externe Tabellen mit nicht unterstützten Dateiformaten
Snowflake unterstützt die folgenden BigQuery-Formate:
BigQuery |
Snowflake |
|---|---|
AVRO |
AVRO |
CSV |
CSV |
NEWLINE_DELIMITED_JSON |
JSON |
ORC |
ORC |
PARQUET |
PARQUET |
Andere Formate werden als nicht unterstützt markiert.
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. Partitionierte externe Hive-Tabellen
Snowflake unterstützt keine partitionierten externen Hive-Tabellen. Die WITH PARTITION COLUMNS-Klausel wird als nicht unterstützt markiert.
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. Externe Tabelle ohne Spaltenliste und ohne gültigen Datei-URI für die INFER_SCHEMA-Funktion
Die INFER_SCHEMA-Funktion erfordert einen LOCATION-Parameter, der den Pfad zu einer Datei oder einem Ordner angibt, der zum Erstellen der Tabellenspalten verwendet wird. Dieser Pfad unterstützt jedoch keinen Regex, d. h. das *-Platzhalterzeichen wird nicht unterstützt.
Wenn die Tabelle keine Spalten enthält, prüft SnowConvert AI alle URIS, um eine zu finden, die keine Platzhalter verwendet, und nutzt diese in der INFER_SCHEMA-Funktion. Wenn keine URI diesen Kriterien entspricht, werden diese FDM und ein FILE_PATH-Platzhalter generiert. Der Platzhalter muss anschließend durch den Pfad einer der von der externen Tabelle referenzierten Dateien ersetzt werden, um die Tabellenspalten zu erzeugen.
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. Nicht unterstützte Tabellenoptionen
Jede andere Tabellenoption, die nicht im Muster für unterstützte Tabellenoptionen aufgeführt ist, wird als nicht unterstützt markiert.
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
);
Zugehörige EWIs¶
SSC-EWI-BQ0013: Externe Tabellendatenformate, die in Snowflake nicht unterstützt werden
SSC-EWI-BQ0014: Partitionierte externe Hive-Tabellen werden in Snowflake nicht unterstützt
SSC-EWI-BQ0015: Die externe Tabelle erfordert einen externen Stagingbereich, um auf einen externen Speicherort zuzugreifen und den EXTERNAL_STAGE-Platzhalter zu definieren und zu ersetzen.
SSC-FDM-BQ0004: Die INFER_SCHEMA-Funktion erfordert einen Dateipfad ohne Platzhalter, um die Tabellenvorlage zu generieren und den FILE_PATH-Platzhalter damit zu ersetzen.
SSC-FDM-BQ0005: Parsen des CSV-Headers wird in externen Tabellen nicht unterstützt. Spalten müssen umbenannt werden, damit sie den ursprünglichen Namen entsprechen.
SSC-FDM-BQ0006: Das Lesen von Google Drive wird in Snowflake nicht unterstützt. Laden Sie die Dateien an den externen Speicherort hoch, und ersetzen Sie die FILE_PATH-Platzhalter.
SSC-FDM-BQ0007: Das Lesen von Tabellen wird in Snowflake nicht unterstützt, verwenden Sie stattdessen den CSV-Dateityp.
CREATE TABLE CLONE¶
Grammatikalische Syntax¶
CREATE TABLE [ IF NOT EXISTS ]
destination_table_name
CLONE source_table_name [FOR SYSTEM_TIME AS OF time_expression]
...
[OPTIONS(table_option_list)]
Beispielhafte Quellcode-Muster¶
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} Die LABELS-Optionen in CREATE TABLE CLONE-Anweisungen werden nicht in TAGs umgewandelt. Da die TAGs der Quelltabelle kopiert werden, können sie während des Kopierens der Tabelle nicht geändert werden. Die Transformation anderer Tabellenoptionen entspricht der für die [CREATE TABLE](./ bigquery-create-table.md#labels-table-option)-Anweisung.
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
Allgemeiner Fall
CREATE TABLE CLONE in Snowflake entspricht funktional CREATE TABLE COPY.
Eingabecode
BigQuery
CREATE TABLE newtable
COPY sourceTable;
Snowflake
CREATE TABLE newtable CLONE sourceTable;
Bemerkung
:Die LABELS-Optionen in CREATE TABLE COPY-Anweisungen werden nicht in TAGs umgewandelt. Da die TAGs der Quelltabelle kopiert werden, können sie während des Kopierens der Tabelle nicht geändert werden. Die Transformation anderer Tabellenoptionen entspricht der für die CREATE TABLE-Anweisung.
CREATE TABLE LIKE¶
Grammatikalische Syntax¶
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 wird von Snowflake vollständig unterstützt.
Bemerkung
:Die LABELS-Optionen in CREATE TABLE LIKE-Anweisungen werden nicht in TAGs umgewandelt. Da die TAGs der Quelltabelle kopiert werden, können sie während des Kopierens der Tabelle nicht geändert werden. Die Transformation anderer Tabellenoptionen entspricht der für die CREATE TABLE-Anweisung.
CREATE TABLE SNAPSHOT¶
Grammatikalische Syntax¶
CREATE SNAPSHOT TABLE [ IF NOT EXISTS ] table_snapshot_name
CLONE source_table_name
[FOR SYSTEM_TIME AS OF time_expression]
[OPTIONS(snapshot_option_list)]
Beispielhafte Quellcode-Muster¶
Allgemeiner Fall¶
Das Snapshot-Schlüsselwort wird in Snowflake entfernt, wodurch die Tabelle in CREATE TABLE CLONE umgewandelt wird.
Die beiden Unterschiede zwischen Snapshots und Klonen bestehen darin, dass Snapshots nicht bearbeitet werden können und normalerweise ein Ablaufdatum haben. Ablaufdaten werden nicht unterstützt. Dies wird wie für die nicht unterstützten Optionen der [CREATE TABLE(bigquery-create-table.md#labels-table-option)-Anweisung angegeben behandelt.
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");
Bemerkung
Die LABELS-Optionen in CREATE TABLE COPY-Anweisungen werden nicht in TAGs umgewandelt. Da die TAGs der Quelltabelle kopiert werden, können sie während des Kopierens der Tabelle nicht geändert werden.
Die Transformation anderer Tabellenoptionen entspricht der für die CREATE TABLE-Anweisung.