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]
Copy

Beispielhafte Quellcode-Muster


DEFAULT-COLLATE

BigQuery
CREATE TABLE table1 (
    col1 STRING 
) 
DEFAULT COLLATE 'und:ci';
Copy
Snowflake
CREATE TABLE table1 (
    col1 STRING
)
DEFAULT_DDL_COLLATION='und-ci';
Copy

Labels – Tabellenoption

BigQuery
CREATE TABLE table1
(
  col1 INT,
  col2 DATE
)
OPTIONS(
  labels=[("org_unit", "development")]
);
Copy
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" }}'
;
Copy

Beschreibung – Tabellenoption

BigQuery
CREATE TABLE table1
(
  col1 INT,
  col2 DATE
)
OPTIONS(
  description = 'My table comment'
);
Copy
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" }}'
;
Copy

Beschreibung – Tabellenoption

BigQuery
CREATE TABLE table1
(
  col1 INT,
  col2 DATE
)
OPTIONS(
  friendly_name = 'Some_table'
);
Copy
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" }}'
;
Copy

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")]
);
Copy

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" }}'
;
Copy

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;
Copy
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;
Copy

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]
Copy

Beispielhafte Quellcode-Muster

Beschreibung – Option

BigQuery
CREATE TABLE table1 (
  col1 VARCHAR(20) OPTIONS(description="A repeated STRING field")
);
Copy
Snowflake
CREATE TABLE table1 (
  col1 VARCHAR(20) COMMENT = 'A repeated STRING field'
);
Copy

COLLATE

BigQuery
CREATE TABLE table1 (
  col1 STRING COLLATE 'und:ci'
);
Copy
Snowflake
CREATE TABLE table1 (
  col1 STRING COLLATE 'und-ci'
);
Copy

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")
);
Copy

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"
    )
)
Copy

Zugehörige EWIs

  1. 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,
  ...
);
Copy

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']
);
Copy
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);
Copy

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']
);
Copy
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);
Copy

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/*']
);
Copy
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);
Copy

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"]
);
Copy
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);
Copy

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']
);
Copy
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);
Copy

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']
);
Copy

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);
Copy

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']
);
Copy
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);
Copy

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']
);
Copy
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);
Copy

4. Externe Tabellen mit nicht unterstützten Dateiformaten

Snowflake unterstützt die folgenden BigQuery-Formate:

BigQuery

Snowflake

AVRO

AVRO

CSV
GOOGLE_SHEETS

CSV

NEWLINE_DELIMITED_JSON
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/*']
);
Copy
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/*']
);
Copy

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);
Copy
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
);
Copy

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/*']
);
Copy
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);
Copy

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
);
Copy
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
);
Copy

Zugehörige EWIs

  1. SSC-EWI-BQ0013: Externe Tabellendatenformate, die in Snowflake nicht unterstützt werden

  2. SSC-EWI-BQ0014: Partitionierte externe Hive-Tabellen werden in Snowflake nicht unterstützt

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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)]
Copy

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";
Copy
Snowflake
CREATE TABLE my_clone_table
CLONE some_table_name2 AT (TIMESTAMP => TIMESTAMP "2025-01-01 00:00:00 UTC");
Copy

::{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)]
Copy

Sample Source Patterns

Allgemeiner Fall

CREATE TABLE CLONE in Snowflake entspricht funktional CREATE TABLE COPY.

Eingabecode
BigQuery
CREATE TABLE newtable
COPY sourceTable;
Copy
Snowflake
CREATE TABLE newtable CLONE sourceTable;
Copy

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)]
Copy

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)]
Copy

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;
Copy
Snowflake
CREATE TABLE mytablesnapshot CLONE mytable;
Copy

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";
Copy
Snowflake
CREATE TABLE IF NOT EXISTS my_snapshot_table2
CLONE some_table_name2 AT (TIMESTAMP => TIMESTAMP "2025-01-01 00:00:00 UTC");
Copy

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.