SnowConvert AI – Hive – CREATE EXTERNAL TABLE¶
Applies to
Hive SQL
Spark SQL
Databricks SQL
Beschreibung¶
EXTERNAL TABLE definiert eine neue Tabelle unter Verwendung einer Datenquelle. (Spark SQL-Sprachreferenz – CREATE DATASOURCE TABLE).
CREATE TABLE [ IF NOT EXISTS ] table_identifier
[ ( col_name1 col_type1 [ COMMENT col_comment1 ], ... ) ]
USING data_source
[ OPTIONS ( key1=val1, key2=val2, ... ) ]
[ PARTITIONED BY ( col_name1, col_name2, ... ) ]
[ CLUSTERED BY ( col_name3, col_name4, ... )
[ SORTED BY ( col_name [ ASC | DESC ], ... ) ]
INTO num_buckets BUCKETS ]
[ LOCATION path ]
[ COMMENT table_comment ]
[ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
[ AS select_statement ]
Die CREATE EXTERNAL TABLE-Anweisung von Spark/Databricks wird in eine CREATE EXTERNAL TABLE-Anweisung von Snowflake transformiert; diese Transformation erfordert jedoch einen Benutzereingriff.
Um die von SnowConvert AI durchgeführte Transformation abzuschließen, ist es notwendig, eine Speicherintegration, einen externen Stagingbereich und (optional) eine Benachrichtigungsintegration zu definieren, die Zugriff auf die externe Quelle haben, in der sich die 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 für Ihr Snowflake-Konto und der Bucketanbieter identisch sind und eine Benachrichtigungsintegration erstellt wurde.
Beispielhafte Quellcode-Muster¶
Erstellen einer externen Tabelle mit expliziter Spaltenliste¶
Wenn die Spaltenliste bereitgestellt wird, generiert SnowConvert AI automatisch die AS-Ausdrucksspaltenoptionen für jede Spalte, um die Dateiwerte zu extrahieren.
Eingabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS external_table
(
order_id int,
date string,
client_name string,
total float
)
USING AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Ausgabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS external_table
(
order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "spark", "convertedOn": "06/18/2025", "domain": "no-domain-provided" }}';
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-Funktion verwendet, um die Spaltendefinitionen zu generieren.
Da die INFER_SCHEMA-Funktion ein Dateiformat benötigt, um zu funktionieren, erzeugt SnowConvert AI für diesen Zweck ein temporäres Dateiformat. Dieses Dateiformat ist nur erforderlich, wenn Sie die CREATE EXTERNAL TABLE-Anweisung ausführen. Es wird beim Beenden der Sitzung automatisch gelöscht.
Eingabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS external_table_No_Columns
using AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Ausgabecode:¶
CREATE OR REPLACE TEMPORARY FILE FORMAT SC_HIVE_FORMAT_ORDERS_NO_COLUMNS_FORMAT
TYPE = AVRO;
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_No_Columns USING TEMPLATE (
SELECT
ARRAY_AGG(OBJECT_CONSTRUCT('COLUMN_NAME', COLUMN_NAME, 'TYPE', TYPE, 'NULLABLE', NULLABLE, 'EXPRESSION', EXPRESSION))
FROM
--** SSC-FDM-0035 - 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_HIVE_FORMAT_ORDERS_NO_COLUMNS_FORMAT'))
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "spark", "convertedOn": "06/18/2025", "domain": "no-domain-provided" }}';
CREATE EXTERNAL TABLE im Hive-Format¶
Die Erstellung von externen Tabellen mit dem Hive-Format wird ebenfalls unterstützt. Sie haben eine FDM hinzugefügt, um Benutzende darüber zu informieren, dass das Einfügen in diese Tabellen nicht unterstützt wird.
Eingabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS External_table_hive_format
(
order_id int,
date string,
client_name string,
total float
)
stored as AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro';
Ausgabecode:¶
--** SSC-FDM-HV0001 - INSERTING VALUES INTO AN EXTERNAL TABLE IS NOT SUPPORTED IN SNOWFLAKE **
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
FILE_FORMAT = (TYPE = AVRO)
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "spark", "convertedOn": "06/18/2025", "domain": "no-domain-provided" }}';
Bekannte Probleme¶
1. Externe Tabellen mit nicht unterstützten Dateiformaten
Snowflake unterstützt die folgenden Spark-Formate:
CSV
PARQUET
ORC
XML
JSON
AVRO
Andere Formate werden als nicht unterstützt markiert.
2. Nicht unterstützte Tabellenoptionen
Einige Tabellenoptionen werden von SnowConvert AI nicht unterstützt und sind mit einer EWI gekennzeichnet.
Eingabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
order_id int,
date string,
client_name string,
total float
)
using AVRO
LOCATION 'gs://sc_external_table_bucket/folder_with_avro/orders.avro'
Tblproperties (
'unsupported_table_option' = 'value'
);
Ausgabecode:¶
CREATE EXTERNAL TABLE IF NOT EXISTS hive_format_orders_Andres
(
order_id int AS CAST(GET_IGNORE_CASE($1, 'order_id') AS int),
date string AS CAST(GET_IGNORE_CASE($1, 'date') AS string),
client_name string AS CAST(GET_IGNORE_CASE($1, 'client_name') AS string),
total float AS CAST(GET_IGNORE_CASE($1, 'total') AS float)
)
!!!RESOLVE EWI!!! /*** SSC-EWI-0032 - EXTERNAL TABLE REQUIRES AN EXTERNAL STAGE TO ACCESS gs:, DEFINE AND REPLACE THE EXTERNAL_STAGE PLACEHOLDER ***/!!!
LOCATION = @EXTERNAL_STAGE
AUTO_REFRESH = false
PATTERN = '/sc_external_table_bucket/folder_with_avro/orders.avro'
FILE_FORMAT = (TYPE = AVRO)
!!!RESOLVE EWI!!! /*** SSC-EWI-0016 - SNOWFLAKE DOES NOT SUPPORT THE OPTIONS: 'UNSUPPORTED_TABLE_OPTION'. ***/!!!
TBLPROPERTIES (
'unsupported_table_option' = 'value'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "spark", "convertedOn": "06/19/2025", "domain": "no-domain-provided" }}';