ALTER TABLE¶
Ändert die Eigenschaften, Spalten oder Beschränkung für eine vorhandene Tabelle.
- Siehe auch:
ALTER TABLE … ALTER COLUMN, CREATE TABLE, DROP TABLE, SHOW TABLES, DESCRIBE TABLE
Syntax¶
ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>
ALTER TABLE [ IF EXISTS ] <name> SWAP WITH <target_table_name>
ALTER TABLE [ IF EXISTS ] <name> { clusteringAction | tableColumnAction | constraintAction }
ALTER TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER TABLE [ IF EXISTS ] <name> extTableColumnAction
ALTER TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER TABLE [ IF EXISTS ] <name> SET
[ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ STAGE_COPY_OPTIONS = ( copyOptions ) ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
ALTER TABLE [ IF EXISTS ] <name> UNSET {
DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
CHANGE_TRACKING |
DEFAULT_DDL_COLLATION |
ENABLE_SCHEMA_EVOLUTION |
COMMENT |
}
[ , ... ]
Wobei:
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) /* RECLUSTER is deprecated */ | RECLUSTER [ MAX_SIZE = <budget_in_bytes> ] [ WHERE <condition> ] /* { SUSPEND | RESUME } RECLUSTER is valid action */ | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }tableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ { DEFAULT <default_value> | { AUTOINCREMENT | IDENTITY } /* AUTOINCREMENT (or IDENTITY) is supported only for */ /* columns with numeric data types (NUMBER, INT, FLOAT, etc.). */ /* Also, if the table is not empty (i.e. if the table contains */ /* any rows), only DEFAULT can be altered. */ [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] [ { ORDER | NOORDER } ] } ] [ inlineConstraint ] [ COLLATE '<collation_specification>' ] | RENAME COLUMN <col_name> TO <new_col_name> | ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> DROP DEFAULT , [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL } , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type> , [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , [ COLUMN ] <col2_name> ... ] [ , ... ] [ ) ] | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] } inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } } [ <constraint_properties> ]Detaillierte Syntax und Beispiele für die Änderung von Spalten finden Sie unter ALTER TABLE … ALTER COLUMN. .
Detaillierte Syntax und Beispiele für das Erstellen/Ändern von Inline-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.
dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ FORCE ] | UNSET AGGREGATION POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]extTableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) | RENAME COLUMN <col_name> TO <new_col_name> | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] }constraintAction ::= { ADD outoflineConstraint | RENAME CONSTRAINT <constraint_name> TO <new_constraint_name> | { ALTER | MODIFY } { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ] | DROP { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ CASCADE | RESTRICT ] } outoflineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ] | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ] | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ] } [ <constraint_properties> ]Detaillierte Syntax und Beispiele für das Erstellen/Ändern von Out-of-Line-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.
searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }Weitere Details dazu finden Sie unter Suchoptimierungsaktionen (searchOptimizationAction).
formatTypeOptions ::= -- If TYPE = CSV COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE RECORD_DELIMITER = '<character>' | NONE FIELD_DELIMITER = '<character>' | NONE FILE_EXTENSION = '<string>' PARSE_HEADER = TRUE | FALSE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 ESCAPE = '<character>' | NONE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE TRIM_SPACE = TRUE | FALSE FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( '<string>' [ , '<string>' ... ] ) ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE EMPTY_FIELD_AS_NULL = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE ENCODING = '<string>' | UTF8 -- If TYPE = JSON COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 TRIM_SPACE = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) FILE_EXTENSION = '<string>' ENABLE_OCTAL = TRUE | FALSE ALLOW_DUPLICATE = TRUE | FALSE STRIP_OUTER_ARRAY = TRUE | FALSE STRIP_NULL_VALUES = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE IGNORE_UTF8_ERRORS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE -- If TYPE = AVRO COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = ORC TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = PARQUET COMPRESSION = AUTO | LZO | SNAPPY | NONE SNAPPY_COMPRESSION = TRUE | FALSE BINARY_AS_TEXT = TRUE | FALSE USE_LOGICAL_TYPE = TRUE | FALSE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = XML COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE IGNORE_UTF8_ERRORS = TRUE | FALSE PRESERVE_SPACE = TRUE | FALSE STRIP_OUTER_ELEMENT = TRUE | FALSE DISABLE_SNOWFLAKE_DATA = TRUE | FALSE DISABLE_AUTO_CONVERT = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSEcopyOptions ::= ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT } SIZE_LIMIT = <num> PURGE = TRUE | FALSE RETURN_FAILED_ONLY = TRUE | FALSE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE ENFORCE_LENGTH = TRUE | FALSE TRUNCATECOLUMNS = TRUE | FALSE FORCE = TRUE | FALSE
Parameter¶
name
Bezeichner für die zu ändernde Tabelle. Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.
RENAME TO new_table_name
Benennt die angegebene Tabelle mit einem neuen Bezeichner um, der derzeit von keiner anderen Tabelle im Schema verwendet wird.
Weitere Informationen zu Tabellenbezeichnern finden Sie unter Anforderungen an Bezeichner.
Sie können das Objekt in eine andere Datenbank und/oder in ein anderes Schema verschieben und dabei optional das Objekt umbenennen. Geben Sie dazu einen qualifizierten
new_name
-Wert an, der den neuen Datenbank- und/oder Schemanamen im Formatdb_name.schema_name.object_name
bzw.schema_name.object_name
enthält.Bemerkung
Die Zieldatenbank und/oder das Zielschema müssen bereits vorhanden sein. Außerdem darf in der Zieldatenbank nicht bereits ein gleichnamiges Schema vorhanden sein, da die Anweisung sonst einen Fehler zurückgibt.
Das Verschieben eines Objekts in ein verwaltetes Zugriffsschema ist nicht zulässig, es sei denn, der Objekteigentümer (d. h. die Rolle mit der Berechtigung OWNERSHIP für das Objekt) ist auch Eigentümer des Zielschemas.
Wenn ein Objekt (Tabelle, Spalte usw.) umbenannt wird, müssen andere Objekte, die darauf verweisen, mit dem neuen Namen aktualisiert werden.
SWAP WITH target_table_name
Swap benennt zwei Tabellen in einer einzigen Transaktion um.
Beachten Sie, dass das Austauschen einer permanenten oder transienten Tabelle durch eine temporäre Tabelle, die nur für die Dauer der Benutzersitzung, in der sie erstellt wurde, bestehen bleibt, nicht zulässig ist. Diese Einschränkung verhindert einen Namenskonflikt, der auftreten könnte, wenn eine permanente oder transiente Tabelle durch eine temporäre Tabelle ausgetauscht wird, die denselben Namen hat, wie eine bereits vorhandene permanente oder transiente Tabelle. Um eine permanente oder transiente Tabelle durch eine temporäre Tabelle zu ersetzen, verwenden Sie drei
ALTER TABLE ... RENAME TO
-Anweisungen: Umbenennen der Tabellea
inc
,b
ina
und dannc
inb
.
Bemerkung
Um eine Tabelle umzubenennen oder zwei Tabellen auszutauschen, muss die Rolle, mit der die Operation durchgeführt wird, OWNERSHIP-Berechtigungen für die Tabellen haben. Darüber hinaus erfordert das Umbenennen einer Tabelle die Berechtigung CREATE TABLE im Schema für die Tabelle.
SET ...
Gibt eine oder mehrere Eigenschaften/Parameter an, die für die Tabelle festgelegt werden sollen (getrennt durch Leerzeichen, Kommas oder Neue-Zeile-Zeichen):
STAGE_FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' )
oder .STAGE_FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ] )
Ändert das Standard-Dateiformat für die Tabelle (zum Laden und Entladen von Daten). Dafür gibt es zwei Optionen:
FORMAT_NAME = file_format_name
Gibt ein vorhandenes Dateiformatobjekt an, das zum Laden/Entladen von Daten verwendet werden soll. Das angegebene Dateiformatobjekt bestimmt den Formattyp (CSV, JSON usw.) und andere Formatoptionen für Datendateien.
Beachten Sie, dass in der Zeichenfolge keine zusätzlichen Formatoptionen angegeben sind. Stattdessen definiert das benannte Dateiformatobjekt die anderen Dateiformatoptionen, die zum Laden/Entladen von Daten verwendet werden. Weitere Informationen dazu finden Sie unter CREATE FILE FORMAT.
TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ]
Gibt den Typ der zu ladenden/entladenden Dateien an. Weitere formatspezifische Optionen können in die Zeichenfolge aufgenommen werden. Weitere Informationen dazu finden Sie unter Formattypoptionen (unter diesem Thema).
Bemerkung
FORMAT_NAME
undTYPE
schließen sich gegenseitig aus. Sie können für eine Tabelle nur eins von beiden angeben.STAGE_COPY_OPTIONS = ( ... )
Ändert die Kopieroptionen, die beim Laden von Daten aus Dateien in die Tabelle verwendet werden. Weitere Details dazu finden Sie unter Kopieroptionen (unter diesem Thema).
DATA_RETENTION_TIME_IN_DAYS = integer
Parameter auf Objektebene, der die Aufbewahrungsfrist der Tabelle für Time Travel ändert. Weitere Details dazu finden Sie unter Verstehen und Verwenden von Time Travel und Verwenden von temporären und transienten Tabellen.
Eine ausführliche Beschreibung dieses Parameters sowie weitere Informationen zu Objektparametern finden Sie unter Parameter.
Werte:
Standardausführung:
0
oder1
Enterprise Edition:
0
bis90
für permanente Tabellen0
oder1
für temporäre und transiente Tabellen
Bemerkung
Der Wert
0
deaktiviert Time Travel für die Tabelle.MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Objektparameter, der die maximale Anzahl von Tagen angibt, für die Snowflake die Datenaufbewahrungsfrist für die Tabelle verlängern kann, um zu verhindern, dass Streams auf der Tabelle veraltet sind.
Eine detaillierte Beschreibung dieses Parameters finden Sie unter MAX_DATA_EXTENSION_TIME_IN_DAYS.
CHANGE_TRACKING = TRUE | FALSE
Gibt an, dass die Änderungsverfolgung in der Tabelle aktiviert oder deaktiviert werden soll.
TRUE
aktiviert die Änderungsverfolgung der Tabelle. Diese Option fügt der Quelltabelle einige ausgeblendete Spalten hinzu und beginnt mit dem Speichern von Metadaten zur Änderungsverfolgung in den Spalten. Diese Spalten verbrauchen nur wenig Speicherplatz.Die Änderungsverfolgungsmetadaten können mithilfe der CHANGES-Klausel für SELECT-Anweisungen oder durch Erstellen und Abfragen eines oder mehrerer Streams der Tabelle abgefragt werden.
FALSE
deaktiviert die Änderungsverfolgung in der Tabelle. Verknüpfte ausgeblendete Spalten werden aus der Tabelle entfernt.
DEFAULT_DDL_COLLATION = 'collation_specification'
Gibt eine Standardsortierungsspezifikation für alle der Tabelle neu hinzugefügten Spalten an.
Durch das Festlegen des Parameters ändert sich nicht die Sortierungsspezifikation für vorhandene Spalten.
Weitere Informationen zu diesem Parameter finden Sie unter DEFAULT_DDL_COLLATION.
ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE }
Aktiviert oder deaktiviert automatische Änderungen am Tabellenschema durch Daten, die aus Quelldateien in die Tabelle geladen werden, einschließlich:
Hinzugefügte Spalten.
Standardmäßig ist die Schemaentwicklung auf maximal 10 hinzugefügte Spalten pro Ladeoperation beschränkt. Um mehr als 10 hinzugefügte Spalten pro Ladeoperation anzufordern, wenden Sie sich an den Snowflake-Support.
Die Einschränkung NOT NULL kann für eine beliebige Anzahl von Spalten, die in neuen Datendateien fehlen, gelöscht werden.
Wenn Sie diese Option auf
TRUE
setzen, wird die automatische Tabellenschemaentwicklung aktiviert. Die StandardeinstellungFALSE
deaktiviert die automatische Tabellenschemaentwicklung.Bemerkung
Beim Laden von Daten aus Dateien erfolgt eine Tabellenspaltenentwicklung, wenn die folgenden Bedingungen erfüllt sind:
Die COPY INTO <Tabelle>-Anweisung enthält den Parameter
MATCH_BY_COLUMN_NAME
.Die Rolle, mit der die Daten geladen werden, hat die EVOLVE SCHEMA- oder die OWNERSHIP-Berechtigung für die Tabelle.
Außerdem muss für die Schemaentwicklung mit CSV bei Verwendung von
MATCH_BY_COLUMN_NAME
undPARSE_HEADER
der ParameterERROR_ON_COLUMN_COUNT_MISMATCH
auf „false“ gesetzt sein.COMMENT = 'string_literal'
Fügt einen Kommentar hinzu oder überschreibt den vorhandenen Kommentar zur Tabelle.
UNSET ...
Gibt eine oder mehrere Eigenschaften/Parameter an, die für die Tabelle nicht festgelegt werden sollen, wodurch sie auf ihre Standardwerte zurückgesetzt werden:
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
CHANGE_TRACKING
DEFAULT_DDL_COLLATION
ENABLE_SCHEMA_EVOLUTION
COMMENT
Bemerkung
Sie können UNSET
nicht verwenden, um das Dateiformat und die Kopieroptionen zurückzusetzen. Um diese Optionen zurückzusetzen, müssen Sie SET
verwenden.
Clustering-Aktionen (clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
Gibt eine oder mehrere Tabellenspalten oder Spaltenausdrücke als Gruppierungsschlüssel für die Tabelle an (oder ändert sie). Dies sind die Spalten/Ausdrücke, für die das Clustering mit Automatic Clustering verwaltet wird.
Wichtig
Gruppierungsschlüssel sind nicht für alle Tabellen vorgesehen oder empfehlenswert. Sie eignen sich vorrangig für sehr große Tabellen (im Multi-Terabyte-Bereich).
Bevor Sie Gruppierungsschlüssel für eine Tabelle angeben, lesen Sie erst Grundlegendes zu Tabellenstrukturen in Snowflake.
RECLUSTER ...
Veraltet
Führt ein manuelles, inkrementelles Reclustering einer Tabelle durch, in der Gruppierungsschlüssel definiert sind:
MAX_SIZE = budget_in_bytes
Veraltet – Verwenden Sie ein größeres Warehouse, um ein effektiveres Reclustering zu erreichen.
Gibt die Obergrenze für die Datenmenge (in Byte) in der Reclustering-Tabelle an.
WHERE condition
Gibt eine Bedingung oder einen Bereich für die Daten an, für die in der Tabelle ein Reclustering ausgeführt werden soll.
Bemerkung
Nur Rollen mit der Berechtigung OWNERSHIP oder INSERT für eine Tabelle können ein Reclustering auf dieser ausführen.
SUSPEND | RESUME RECLUSTER
Aktiviert oder deaktiviert Automatic Clustering für die Tabelle.
DROP CLUSTERING KEY
Löscht den Gruppierungsschlüssel für die Tabelle.
Weitere Informationen zu Gruppierungsschlüsseln und Reclustering finden Sie unter Grundlegendes zu Tabellenstrukturen in Snowflake.
Tabellenspaltenaktionen (tableColumnAction
)¶
ADD [ COLUMN ] [ IF NOT EXISTS ] col_name col_data_type
.[ DEFAULT default_value | AUTOINCREMENT ... ]
.[ inlineConstraint ]
[ COLLATE 'collation_specification' ]
.[ [ WITH ] MASKING POLICY policy_name ]
.[ [ WITH ] PROJECTION POLICY policy_name ]
.[ [ WITH ] TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] ) ] [ , ...]
Fügt eine neue Spalte hinzu. Sie können einen Standardwert, eine Inline-Einschränkung, eine Sortierungsspezifikation, eine Maskierungsrichtlinie und/oder ein oder mehrere Tags angeben.
Ein Standardwert für eine Spalte, die Sie hinzufügen, muss ein literaler Wert sein, bei dem es sich aber nicht um einen Ausdruck oder einen von einer Funktion zurückgegebenen Wert handeln darf. Der folgende Befehl gibt zum Beispiel einen erwarteten Fehler zurück:
ALTER TABLE t1 ADD COLUMN c5 VARCHAR DEFAULT 12345::VARCHAR;
002263 (22000): SQL compilation error: Invalid column default expression [CAST(12345 AS VARCHAR(16777216))]
Wenn Sie eine Tabelle zum ersten Mal erstellen, können Sie Ausdrücke als Standardwerte verwenden, aber nicht, wenn Sie Spalten hinzufügen.
Der Standardwert für eine Spalte muss mit dem Datentyp der Spalte übereinstimmen. Der Versuch, einen Standardwert mit einem nicht übereinstimmenden Datentyp festzulegen, schlägt mit einem Fehler fehl. Beispiel:
ALTER TABLE t1 ADD COLUMN c6 DATE DEFAULT '20230101';
002023 (22000): SQL compilation error: Expression type does not match column data type, expecting DATE but got VARCHAR(8) for column C6
Weitere Informationen zu Aktionen auf Tabellenspalten finden Sie unter:
ADD COLUMN-Operationen können mit demselben Befehl auf mehreren Spalten ausgeführt werden.
Wenn Sie nicht sicher sind, ob die Spalte bereits existiert, können Sie beim Hinzufügen der Spalte IF NOT EXISTS angeben. Wenn die Spalte bereits existiert, hat ADD COLUMN keine Auswirkungen auf die bestehende Spalte und führt nicht zu einem Fehler.
Bemerkung
Sie können IF NOT EXISTS nicht angeben, wenn Sie für die neue Spalte auch Folgendes angeben:
DEFAULT, AUTOINCREMENT oder IDENTITY
UNIQUE, PRIMARY KEY oder FOREIGN KEY
RENAME COLUMN col_name to new_col_name
Benennt die angegebene Spalte in einen neuen Namen um, der derzeit für keine andere Spalte der Tabelle verwendet wird.
Eine Spalte, die Teil eines Gruppierungsschlüssels ist, kann nicht umbenannt werden.
Wenn ein Objekt (Tabelle, Spalte usw.) umbenannt wird, müssen andere Objekte, die darauf verweisen, mit dem neuen Namen aktualisiert werden.
DROP COLUMN [ IF EXISTS ] col_name [ CASCADE | RESTRICT ]
Entfernt die angegebene Spalte aus der Tabelle.
Wenn Sie nicht sicher sind, ob die Spalte bereits existiert, können Sie beim Löschen der Spalte IF EXISTS angeben. Wenn die Spalte nicht existiert, hat DROP COLUMN keine Auswirkung und führt nicht zu einem Fehler.
Das Löschen einer Spalte ist eine reine Metadatenoperation. Die Mikropartitionen werden nicht sofort neu geschrieben, weswegen der von der Spalte belegte Speicherplatz nicht sofort freigegeben wird. In der Regel wird der Speicherplatz innerhalb einer einzelnen Mikropartition beim nächsten Überschreiben der Mikropartition freigegeben. Dies ist in der Regel der Fall, wenn ein Schreibvorgang aufgrund von DML (INSERT, UPDATE, DELETE) oder Reclustering erfolgt.
Spaltenaktionen für externe Tabellen (extTableColumnAction
)¶
Alle anderen Änderungen an externen Tabellen finden Sie unter ALTER EXTERNAL TABLE.
ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) [, ...]
Fügt der externen Tabelle eine neue Spalte hinzu.
Wenn Sie nicht sicher sind, ob die Spalte bereits existiert, können Sie beim Hinzufügen der Spalte IF NOT EXISTS angeben. Wenn die Spalte bereits existiert, hat ADD COLUMN keine Auswirkungen auf die bestehende Spalte und führt nicht zu einem Fehler.
Diese Operation kann mit demselben Befehl auf mehreren Spalten ausgeführt werden.
col_name
Zeichenfolge, die den Spaltenbezeichner (z. B. Name) angibt. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner.
Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.
col_type
Zeichenfolge (Konstante), die den Datentyp für die Spalte angibt. Der Datentyp der Spalte muss mit dem Ergebnis von
expr
übereinstimmen.Einzelheiten zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Referenz der SQL-Datentypen.
expr
Zeichenfolge, die den Ausdruck für die Spalte angibt. Bei einer Abfrage gibt die Spalte Ergebnisse zurück, die von diesem Ausdruck abgeleitet sind.
Externe Tabellenspalten sind virtuelle Spalten, die mit einem expliziten Ausdruck definiert werden. Fügen Sie virtuelle Spalten als Ausdrücke hinzu, indem Sie die VALUE-Spalte und/oder die METADATA$FILENAME-Pseudospalte verwenden:
- VALUE:
Eine Spalte vom Typ VARIANT, die eine einzelne Zeile in der externen Datei darstellt.
- CSV:
Die VALUE-Spalte strukturiert jede Zeile als ein Objekt mit Elementen, die durch die Spaltenposition identifiziert werden (d. h.
{c1: <Spalte_1_Wert>, c2: <Spalte_2_Wert>, c3: <Spalte_1_Wert> ...}
).Fügen Sie z. B. eine VARCHAR-Spalte mit dem Namen
mycol
hinzu, die auf die erste Spalte in den CSV-Stagingdateien verweist:mycol varchar as (value:c1::varchar)
- Semistrukturierte Daten:
Schließen Sie Elementnamen und Werte in doppelte Anführungszeichen ein. Durchlaufen Sie den Pfad in der VALUE-Spalte mithilfe der punktierten Schreibweise.
Nehmen wir zum Beispiel an, dass das Folgende eine einzelne Zeile mit semistrukturierten Daten in einer Stagingdatei darstellt:
{ "a":"1", "b": { "c":"2", "d":"3" } }
Fügen Sie eine VARCHAR-Spalte mit dem Namen
mycol
hinzu, die auf das verschachtelte, sich wiederholende Elementc
in der Stagingdatei verweist:mycol varchar as (value:"b"."c"::varchar)
- METADATA$FILENAME:
Eine Pseudospalte, die den Namen jeder in der externen Tabelle enthaltenen Staging-Datendatei einschließlich ihres Pfads im Stagingbereich angibt.
RENAME COLUMN col_name to new_col_name
Benennt die angegebene Spalte in einen neuen Namen um, der derzeit für keine andere Spalte der Tabelle verwendet wird.
DROP COLUMN [ IF EXISTS ] col_name
Entfernt die angegebene Spalte aus der Tabelle.
Wenn Sie nicht sicher sind, ob die Spalte bereits existiert, können Sie beim Löschen der Spalte IF EXISTS angeben. Wenn die Spalte nicht existiert, hat DROP COLUMN keine Auswirkung und führt nicht zu einem Fehler.
Einschränkungsaktionen (constraintAction
)¶
ADD CONSTRAINT
Fügt einer oder mehreren Spalten in der Tabelle eine Out-of-Line-Integritätseinschränkung hinzu. Informationen zum Hinzufügen einer Inline-Einschränkung (für eine Spalte) finden Sie unter Spaltenaktionen (unter diesem Thema).
RENAME CONSTRAINT constraint_name TO new_constraint_name
Benennt die angegebene Einschränkung um.
ALTER | MODIFY CONSTRAINT ...
Ändert die Eigenschaften für die angegebene Einschränkung.
DROP CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE | FOREIGN KEY ( col_name [ , ... ] ) [ CASCADE | RESTRICT ]
Löscht die angegebene Einschränkung für die angegebene Spalte oder den Satz von Spalten.
Detaillierte Syntax und Beispiele für das Hinzufügen oder Ändern von Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.
Data-Governance-Richtlinie und Tag-Aktionen (dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an.
Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann.
Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingente für Objekte und Spalten.
policy_name
Bezeichner für die Richtlinie. Dieser muss für Ihr Konto eindeutig sein.
Die folgenden Klauseln gelten für alle Tabellentypen, die Zeilenzugriffsrichtlinien unterstützen, wie z. B. Tabellen, Ansichten und Ereignistabellen. Der Einfachheit halber wird in den Klauseln nur von „Tabelle“ gesprochen.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
Fügt der Tabelle eine Zeilenzugriffsrichtlinie hinzu.
Es muss mindestens ein Spaltenname angegeben werden. Zusätzliche Spalten können mit einem Komma zwischen den einzelnen Spaltennamen angegeben werden. Verwenden Sie diesen Ausdruck, um eine Zeilenzugriffsrichtlinie sowohl zu einer Ereignistabelle als auch zu einer externen Tabelle hinzuzufügen.
DROP ROW ACCESS POLICY policy_name
Entfernt eine Zeilenzugriffsrichtlinie aus der Tabelle.
Verwenden Sie diese Klausel, um die Richtlinie in der Tabelle zu löschen.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
Löscht mit nur einer einzigen SQL-Anweisung die für die Tabelle festgelegte Zeilenzugriffsrichtlinie und fügt eine Zeilenzugriffsrichtlinie zu derselben Tabelle hinzu.
DROP ALL ROW ACCESS POLICIES
Löscht alle Zuordnungen von Zeilenzugriffsrichtlinien aus der Tabelle.
Dieser Ausdruck ist hilfreich, wenn eine Zeilenzugriffsrichtlinie aus einem Schema gelöscht wird, bevor die Richtlinie aus einer Ereignistabelle gelöscht wird. Verwenden Sie diesen Ausdruck, um Zuordnungen von Zeilenzugriffsrichtlinien aus der Tabelle zu löschen.
SET AGGREGATION POLICY policy_name [ FORCE ]
Weist der Tabelle eine Aggregationsrichtlinie zu. Verwenden Sie den optionalen Parameter FORCE, um eine bestehende Aggregationsrichtlinie atomar durch die neue Aggregationsrichtlinie zu ersetzen.
UNSET AGGREGATION POLICY
Löst die Zuordnung einer Aggregationsrichtlinie zu der Tabelle auf.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
Gibt die Argumente an, die an den SQL-Ausdruck für die bedingte Maskierungsrichtlinie übergeben werden sollen.
Die erste Spalte in der Liste gibt die Spalte für die Richtlinienbedingungen zur Maskierung oder Tokenisierung der Daten an. Sie muss mit der Spalte übereinstimmen, für die die Maskierungsrichtlinie festgelegt ist.
Die zusätzlichen Spalten geben an, welche Spalten ausgewertet werden sollen, um zu ermitteln, ob die Daten in der jeweiligen Zeile des Abfrageergebnisses maskiert oder tokenisiert werden sollen, wenn auf der ersten Spalte eine Abfrage ausgeführt wird.
Wenn die USING-Klausel weggelassen wird, behandelt Snowflake die bedingte Maskierungsrichtlinie wie eine normale Maskierungsrichtlinie.
FORCE
Ersetzt mit nur einer Anweisung eine Maskierungs- oder Projektionsrichtlinie, die derzeit für eine Spalte festgelegt ist, durch eine andere Richtlinie.
Beachten Sie, dass die Verwendung des Schlüsselworts
FORCE
mit einer Maskierungsrichtlinie voraussetzt, dass der Datentyp der Richtlinie in der ALTER TABLE-Anweisung (d. h. STRING) mit dem Datentyp der aktuell für die Spalte festgelegten Maskierungsrichtlinie (d. h. STRING) übereinstimmt.Wenn für die Spalte derzeit keine Maskierungsrichtlinie festgelegt ist, hat die Angabe dieses Schlüsselworts keine Auswirkungen.
Weitere Details dazu finden Sie unter Maskierungsrichtlinie auf einer Spalte ersetzen oder Projektionsrichtlinie ersetzen.
Suchoptimierungsaktionen (searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
Fügt die Suchoptimierung für die gesamte Tabelle oder bei Angabe der optionale ON-Klausel für bestimmte Spalten hinzu.
Hinweis:
Die Wartung der Suchoptimierung kann teuer werden, insbesondere wenn sich die Daten in der Tabelle häufig ändern. Weitere Informationen dazu finden Sie unter Abschätzen und Verwalten der Kosten für die Suchoptimierung.
Wenn Sie versuchen, einer materialisierten Ansicht eine Suchoptimierung hinzuzufügen, gibt Snowflake eine Fehlermeldung zurück.
ON search_method_with_target [, search_method_with_target ... ]
Gibt an, dass Sie die Suchoptimierung für bestimmte Spalten oder VARIANT-Felder (und nicht für die gesamte Tabelle) konfigurieren möchten.
Verwenden Sie für
search_method_with_target
einen Ausdruck mit der folgenden Syntax:<search_method>(<target> [, ...])
Wobei:
search_method
gibt eine der folgenden Methoden an, die Abfragen für einen bestimmten Prädikatstyp optimieren:Suchmethode
Beschreibung
EQUALITY
Gleichheits- und IN-Prädikate.
SUBSTRING
Prädikate, die mit Teilzeichenfolgen und regulären Ausdrücken übereinstimmen (z. B. [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE oder REGEXP_LIKE)
GEO
Prädikate, die GEOGRAPHY-Typen verwenden.
target
gibt die Spalte, das VARIANT-Feld oder ein Sternchen (*) an.Je nach dem Wert von
search_method
können Sie eine Spalte oder ein VARIANT-Feld eines der folgenden Typen angeben:Suchmethode
Unterstützte Ziele
EQUALITY
Spalten mit numerischen, Zeichenfolgen-, Binär- und VARIANT-Datentypen, einschließlich Pfaden zu Feldern in VARIANT-Werten.
Um ein VARIANT-Feld anzugeben, verwenden Sie die Punkt- oder Klammernotation (z. B.
my_column:my_field_name.my_nested_field_name
odermy_column['my_field_name']['my_nested_field_name']
). Sie können für die Angabe des Felds auch einen durch Doppelpunkte getrennten Pfad verwenden (z. B.my_column:my_field_name:my_nested_field_name
).Wenn Sie ein VARIANT-Feld angeben, gilt die Konfiguration für alle verschachtelten Felder unter diesem Feld. So geben Sie beispielsweise
ON EQUALITY(src:a.b)
an:Diese Konfiguration kann Abfragen auf
on src:a.b
und auf allen verschachtelten Feldern (z. B.src:a.b.c
,src:a.b.c.d
) verbessern.Diese Konfiguration wirkt sich nicht auf Abfragen aus, die das Präfix
src:a.b
nicht verwenden (z.B.src:a
,src:z
).
SUBSTRING
Spalten mit Zeichenfolgen- oder VARIANT-Datentypen, einschließlich Pfaden zu Feldern in VARIANT-Werten. Geben Sie Pfade zu Feldern an, wie oben unter
EQUALITY
beschrieben. Die Suche nach verschachtelten Feldern wird auf die gleiche Weise verbessert.GEO
Spalten vom Datentyp GEOGRAPHY
Um alle zutreffenden Spalten in der Tabelle als Ziele anzugeben, verwenden Sie das Sternchen (
*
).Beachten Sie, dass Sie für eine gegebene Suchmethode nicht sowohl Sternchen als auch spezifische Spaltennamen angeben können. Sie können jedoch Sternchen bei verschiedenen Suchmethoden angeben.
Sie können zum Beispiel die folgenden Ausdrücke angeben:
-- Allowed ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
Die folgenden Ausdrücke können Sie nicht angeben:
-- Not allowed ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
Wenn Sie mehr als eine Suchmethode für ein Ziel angeben möchten, trennen Sie jede nachfolgende Methode und jedes Ziel durch ein Komma:
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Wenn Sie den Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION ON … mehrfach für dieselbe Tabelle ausführen, wird jeder nachfolgende Befehl zu der bestehenden Konfiguration der Tabelle hinzugefügt. Angenommen, Sie führen die folgenden Befehle aus:
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
Damit werden Gleichheitsprädikate für die Spalten c1, c2, c3 und c4 zur Konfiguration der Tabelle hinzugefügt. Dies ist gleichbedeutend mit der Ausführung des Befehls:
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Weitere Beispiele finden Sie unter Aktivieren der Suchoptimierung für bestimmte Spalten.
DROP SEARCH OPTIMIZATION
Entfernt die Suchoptimierung von der gesamten Tabelle oder bei Angabe der optionale ON-Klausel von bestimmten Spalten.
Hinweis:
Wenn eine Tabelle die Suchoptimierungseigenschaft hat, bleibt die Suchoptimierungseigenschaft erhalten, wenn Sie die Tabelle löschen und entfernen.
Das Entfernen der Suchoptimierungseigenschaft aus einer Tabelle und das anschließende Hinzufügen verursachen die gleichen Kosten wie das erstmalige Hinzufügen.
ON search_method_with_target | column_name | expression_id [, ... ]
Gibt an, dass Sie die Suchoptimierung von bestimmte Spalten oder VARIANT-Feldern (und nicht von der gesamten Tabelle) entfernen möchten.
Um die zu löschende Spaltenkonfiguration zu identifizieren, verwenden Sie eine der folgenden Optionen:
Geben Sie für
search_method_with_target
eine Methode zur Optimierung von Abfragen für ein oder mehrere bestimmte Ziele an, die Spalten oder VARIANT-Felder sein können. Verwenden Sie die oben beschriebene Syntax.Geben Sie für
column_name
den Namen der für die Suchoptimierung konfigurierten Spalte an. Durch die Angabe des Spaltennamens werden alle Ausdrücke für diese Spalte gelöscht, einschließlich der Ausdrücke, die VARIANT-Felder in der Spalte verwenden.Geben Sie für
expression_id
die ID eines Ausdrucks an, der in der Ausgabe des Befehls DESCRIBE SEARCH OPTIMIZATION aufgeführt ist.
Wenn Sie mehr als eine dieser Optionen angeben möchten, trennen Sie die Elemente durch ein Komma.
Sie können beliebige Kombinationen von Suchmethoden mit Zielen, Spaltennamen und Ausdruck-IDs angeben.
Weitere Beispiele finden Sie unter Löschen der Suchoptimierung für bestimmte Spalten.
Formattypoptionen (formatTypeOptions
)¶
Formattypoptionen werden zum Laden von Daten in und Entladen von Daten aus Tabellen verwendet.
Je nach angegebenem Dateiformattyp (STAGE_FILE_FORMAT = ( TYPE = ... )
) können Sie eine oder mehrere der folgenden formatspezifischen Optionen (durch Leerzeichen, Kommas oder Neue-Zeile-Zeichen getrennt) einschließen:
TYPE = CSV¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Beim Laden von Daten wird der aktuelle Komprimierungsalgorithmus für die Datendatei angegeben. Snowflake verwendet diese Option, um zu erkennen, wie eine bereits komprimierte Datendatei komprimiert wurde, sodass die komprimierten Daten in der Datei zum Laden extrahiert werden können.
Beim Entladen von Daten wird die Datendatei mit dem angegebenen Komprimierungsalgorithmus komprimiert.
- Werte:
Unterstützte Werte
Anmerkungen
AUTO
Beim Laden von Daten wird der Komprimierungsalgorithmus automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Beim Entladen von Daten werden Dateien automatisch mit der Standardmethode gzip komprimiert.
GZIP
BZ2
BROTLI
Muss beim Laden/Entladen von Brotli-komprimierten Dateien angegeben werden.
ZSTD
Zstandard v0.8 (und höher) wird unterstützt.
DEFLATE
Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).
RAW_DEFLATE
Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Standard:
AUTO
RECORD_DELIMITER = 'character' | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Ein oder mehrere Einzelbyte- oder Multibyte-Zeichen, die Datensätze in einer Eingabedatei (Laden von Daten) oder einer entladenen Datei (Entladen von Daten) voneinander trennen. Akzeptiert gängige Escapesequenzen oder die folgenden Einzelbyte- oder Multibyte-Zeichen:
- Einzelbyte-Zeichen:
Oktalwerte (mit
\\
vorangestellt) oder Hexadezimalwerte (mit0x
oder\x
vorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (^
) getrennt sind, den Oktalwert (\\136
) oder den Hexadezimalwert (0x5e
) an.- Multibyte-Zeichen:
Hexadezimalwerte (mit vorangestelltem
\x
). Geben Sie beispielsweise für Datensätze, die durch das Centzeichen (¢
) getrennt sind, den Hexadezimalwert (\xC2\xA2
) an.Das Trennzeichen für RECORD_DELIMITER oder FIELD_DELIMITER darf jedoch keine Teilzeichenfolge des Trennzeichens der anderen Dateiformatoption sein (z. B.
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
).
Das angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Sequenz von Bytes sein. Beachten Sie auch, dass das Trennzeichen nur maximal 20 Zeichen lang sein darf.
Akzeptiert auch den Wert
NONE
.- Standard:
- Laden von Daten:
Zeichen für „Neue Zeile“. Beachten Sie, dass „neue Zeile“ logisch ist, sodass `` `` als neue Zeile für Dateien auf einer Windows-Plattform verstanden wird.
- Entladen von Daten:
Neue-Zeile-Zeichen (`` ``).
FIELD_DELIMITER = 'character' | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Ein oder mehrere Einzelbyte- oder Multibyte-Zeichen, die Felder in einer Eingabedatei (Laden von Daten) oder einer entladenen Datei (Entladen von Daten) voneinander trennen. Akzeptiert gängige Escapesequenzen oder die folgenden Einzelbyte- oder Multibyte-Zeichen:
- Einzelbyte-Zeichen:
Oktalwerte (mit
\\
vorangestellt) oder Hexadezimalwerte (mit0x
oder\x
vorangestellt). Geben Sie beispielsweise für Datensätze, die durch das Zirkumflex-Akzentzeichen (^
) getrennt sind, den Oktalwert (\\136
) oder den Hexadezimalwert (0x5e
) an.- Multibyte-Zeichen:
Hexadezimalwerte (mit vorangestelltem
\x
). Geben Sie beispielsweise für Datensätze, die durch das Centzeichen (¢
) getrennt sind, den Hexadezimalwert (\xC2\xA2
) an.Das Trennzeichen für RECORD_DELIMITER oder FIELD_DELIMITER darf jedoch keine Teilzeichenfolge des Trennzeichens der anderen Dateiformatoption sein (z. B.
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
).Bemerkung
Für Nicht-ASCII-Zeichen müssen Sie den Hex-Byte-Sequenzwert verwenden, um ein deterministisches Verhalten zu erreichen.
Das angegebene Trennzeichen muss ein gültiges UTF-8-Zeichen sein und darf keine zufällige Sequenz von Bytes sein. Beachten Sie auch, dass das Trennzeichen nur maximal 20 Zeichen lang sein darf.
Akzeptiert auch den Wert
NONE
.- Standard:
Komma (
,
)
FILE_EXTENSION = 'string' | NONE
- Verwendung:
Nur Entladen von Daten
- Definition:
Gibt die Erweiterung für Dateien an, die in einen Stagingbereich entladen werden. Akzeptiert jede Erweiterung. Der Benutzer ist dafür verantwortlich, eine Dateiendung anzugeben, die von jeder gewünschten Software oder dem gewünschten Dienst gelesen werden kann.
- Standard:
Null, d. h. die Dateiendung wird durch den Formattyp bestimmt:
.csv[compression]
, wobeicompression
die durch das Komprimierungsverfahren hinzugefügte Erweiterung ist, wennCOMPRESSION
gesetzt ist.
Bemerkung
Wenn die
SINGLE
-Kopieroption den WertTRUE
hat, wird mit dem Befehl COPY standardmäßig eine Datei ohne Dateiendung entladen. Um eine Dateierweiterung anzugeben, geben Sie einen Dateinamen und eine Erweiterung im Pfad zum internen Speicherplatzinternal_location
oder im Pfad zum externen Speicherplatzexternal_location
an (z. B.copy into @stage/data.csv
).PARSE_HEADER = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob die Überschriften in der ersten Zeile der Datendateien zur Bestimmung der Spaltennamen verwendet werden sollen.
Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:
Automatisches Erkennen von Spaltendefinitionen mithilfe der Funktion INFER_SCHEMA.
Laden von CSV-Daten in separate Spalten mithilfe der Funktion INFER_SCHEMA und der Kopieroption MATCH_BY_COLUMN_NAME.
Wenn die Option auf TRUE gesetzt ist, werden die Überschriften in der ersten Zeile zur Bestimmung der Spaltennamen verwendet. Der Standardwert FALSE gibt die Spaltennamen als „c*“ zurück, wobei „*“ die Position der Spalte ist.
Beachten Sie, dass die Option SKIP_HEADER bei PARSE_HEADER = TRUE nicht unterstützt wird.
Standard:
FALSE
SKIP_HEADER = integer
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Anzahl der Zeilen am Anfang der zu überspringenden Datei.
Beachten Sie, dass SKIP_HEADER nicht die Werte RECORD_DELIMITER oder FIELD_DELIMITER verwendet, um zu bestimmen, was eine Kopfzeile ist. Stattdessen wird einfach die angegebene Anzahl von CRLF (Wagenrücklauf, Zeilenvorschub)-begrenzten Zeilen in der Datei übersprungen. RECORD_DELIMITER und FIELD_DELIMITER werden dann verwendet, um die zu ladenden Datenzeilen zu bestimmen.
- Standard:
0
SKIP_BLANK_LINES = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob Leerzeilen in den Datendateien übersprungen werden sollen oder ob sie zu einem Datensatzende-Fehler (Standardverhalten) führen.
Standard:
FALSE
DATE_FORMAT = 'string' | AUTO
- Verwendung:
Laden und Entladen von Daten
- Definition:
Definiert das Format der Datumswerte in den Datendateien (Laden von Daten) oder der Tabelle (Entladen von Daten). Wenn ein Wert nicht angegeben ist oder
AUTO
ist, wird der Wert für den Parameter DATE_INPUT_FORMAT (Laden von Daten) oder DATE_OUTPUT_FORMAT (Entladen von Daten) verwendet.- Standard:
AUTO
TIME_FORMAT = 'string' | AUTO
- Verwendung:
Laden und Entladen von Daten
- Definition:
Definiert das Format der Zeitwerte in den Datendateien (Laden von Daten) oder der Tabelle (Entladen von Daten). Wenn ein Wert nicht angegeben ist oder
AUTO
ist, wird der Wert für den Parameter TIME_INPUT_FORMAT (Laden von Daten) oder TIME_OUTPUT_FORMAT (Entladen von Daten) verwendet.- Standard:
AUTO
TIMESTAMP_FORMAT = string' | AUTO
- Verwendung:
Laden und Entladen von Daten
- Definition:
Definiert das Format der Zeitstempelwerte in den Datendateien (Laden von Daten) oder der Tabelle (Entladen von Daten). Wenn ein Wert nicht angegeben oder
AUTO
ist, wird der Wert für den Parameter TIMESTAMP_INPUT_FORMAT (Laden von Daten) oder TIMESTAMP_OUTPUT_FORMAT (Entladen von Daten) verwendet.- Standard:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
- Verwendung:
Laden und Entladen von Daten
- Definition:
Definiert das Codierungsformat für die Binäreingabe oder -ausgabe. Die Option kann beim Laden von Daten in oder Entladen von Daten aus binären Spalten einer Tabelle verwendet werden.
- Standard:
HEX
ESCAPE = 'character' | NONE
- Verwendung:
Laden und Entladen von Daten
- Definition:
Zeichenfolge mit einem Einzelbyte-Zeichen, das als Escapezeichen für eingeschlossene und nicht eingeschlossene Feldwerte verwendet wird. Ein Escapezeichen ruft eine alternative Interpretation für nachfolgende Zeichen in einer Sequenz von Zeichen auf. Sie können das ESCAPE-Zeichen verwenden, um Instanzen von
FIELD_OPTIONALLY_ENCLOSED_BY
-Zeichen in den Daten als Literale zu interpretieren.Akzeptiert gängige Escapesequenzen, Oktalwerte oder Hexadezimalwerte.
- Laden von Daten:
Gibt nur das Escapezeichen für eingeschlossene Felder an. Geben Sie das Zeichen an, das zum Einschließen von Feldern verwendet wird, indem Sie
FIELD_OPTIONALLY_ENCLOSED_BY
festlegen.Bemerkung
Diese Dateiformatoption unterstützt nur Einzelbyte-Zeichen. Beachten Sie, dass die UTF-8-Zeichencodierung höherwertige ASCII-Zeichen als Multibyte-Zeichen darstellt. Wenn Ihre Datendatei mit dem UTF-8-Zeichensatz kodiert ist, können Sie keine höherwertigen ASCII-Zeichen als Optionswert angeben.
Wenn Sie ein höherwertiges Zeichen (ASCII) angeben, empfehlen wir Ihnen außerdem, die Dateiformatoption
ENCODING = 'string'
als Zeichencodierung für Ihre Datendateien festzulegen, damit das Zeichen korrekt interpretiert wird.- Entladen von Daten:
Wenn diese Option gesetzt ist, wird der Escapezeichensatz für
ESCAPE_UNENCLOSED_FIELD
überschrieben.- Standard:
NONE
ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Zeichenfolge mit Einzelbyte-Zeichen, das als Escapezeichen nur für nicht eingeschlossene Feldwerte verwendet wird. Ein Escapezeichen ruft eine alternative Interpretation für nachfolgende Zeichen in einer Sequenz von Zeichen auf. Sie können das ESCAPE-Zeichen verwenden, um Instanzen von
FIELD_DELIMITER
- oderRECORD_DELIMITER
-Zeichen in den Daten als Literale zu interpretieren. Das Escapezeichen kann auch verwendet werden, um Instanzen von sich selbst in den Daten in Escapezeichen einzuschließen.Akzeptiert gängige Escapesequenzen, Oktalwerte oder Hexadezimalwerte.
- Laden von Daten:
Gibt nur das Escapezeichen für nicht eingeschlossene Felder an.
Bemerkung
Der Standardwert ist
\
. Wenn eine Zeile in einer Datendatei mit dem umgekehrten Schrägstrich (\
) endet, wird das für die DateiformatoptionRECORD_DELIMITER
angegebene Zeilenumbruch- oder Wagenrücklaufzeichen durch dieses Zeichen ersetzt. Infolgedessen behandelt die Ladeoperation diese und die nächste Zeile als eine Datenzeile. Um dieses Problem zu vermeiden, setzen Sie diesen Wert aufNONE
.Diese Dateiformatoption unterstützt nur Einzelbyte-Zeichen. Beachten Sie, dass die UTF-8-Zeichencodierung höherwertige ASCII-Zeichen als Multibyte-Zeichen darstellt. Wenn Ihre Datendatei mit dem UTF-8-Zeichensatz kodiert ist, können Sie keine höherwertigen ASCII-Zeichen als Optionswert angeben.
Wenn Sie ein höherwertiges Zeichen (ASCII) angeben, empfehlen wir Ihnen außerdem, die Dateiformatoption
ENCODING = 'string'
als Zeichencodierung für Ihre Datendateien festzulegen, damit das Zeichen korrekt interpretiert wird.
- Entladen von Daten:
Wenn
ESCAPE
gesetzt ist, wird diese Option vom Escapezeichensatz der Dateiformatoption überschrieben.- Standard:
Backslash (
\
)
TRIM_SPACE = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob Leerzeichen aus Feldern entfernt werden sollen.
Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf
TRUE
, um unerwünschte Leerzeichen während des Datenladevorgangs zu entfernen.Weiteres Beispiel: Wenn Zeichenfolgen von Anführungszeichen umschlossen sind und die Anführungszeichen von führenden oder nachstehende Leerzeichen, können Sie die umgebenden Leerzeichen mit dieser Option entfernen und die Anführungszeichen mit der Option
FIELD_OPTIONALLY_ENCLOSED_BY
. Beachten Sie, dass alle innerhalb der Anführungszeichen befindlichen Leerzeichen erhalten bleiben. Zum Beispiel beiFIELD_DELIMITER = '|'
undFIELD_OPTIONALLY_ENCLOSED_BY = '"'
:|"Hello world"| /* loads as */ >Hello world< |" Hello world "| /* loads as */ > Hello world < | "Hello world" | /* loads as */ >Hello world<
(die Klammern in diesem Beispiel werden nicht geladen; sie dienen dazu, den Anfang und das Ende der geladenen Zeichenfolgen zu markieren).
- Standard:
FALSE
FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Zeichen, das verwendet wird, um Zeichenfolgen einzuschließen. Der Wert kann
NONE
, ein einfaches Anführungszeichen ('
) oder ein doppeltes Anführungszeichen ("
) sein. Um das einfache Anführungszeichen verwenden zu können, müssen Sie die oktale oder hexadezimale Darstellung (0x27
) oder das doppelte einfache Anführungszeichen als Escape-Zeichen (''
) verwenden.Wenn ein Feld dieses Zeichen enthält, können Sie es mit dem gleichen Zeichen löschen. Wenn der Wert beispielsweise das doppelte Anführungszeichen ist und ein Feld die Zeichenfolge
A "B" C
enthält, schließen Sie die doppelten Anführungszeichen in Escapezeichen ein:A ""B"" C
- Standard:
NONE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird:
Beim Laden von Daten ersetzt Snowflake diese Werte in der Datenladequelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas.
Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B.
2
als Wert angegeben wird, werden alle Instanzen von2
entweder in eine Zeichenfolge oder in eine Zahl konvertiert.Beispiel:
NULL_IF = ('N', 'NULL', 'NUL', '')
Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann.
Beim Entladen von Daten konvertiert Snowflake SQL-NULL-Werte in den ersten Wert der Liste.
- Standard:
\N
(d. h. NULL mit der Annahme, dass derESCAPE_UNENCLOSED_FIELD
-Wert\
ist)
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob ein Parsing-Fehler generiert werden soll, wenn die Anzahl der durch Trennzeichen begrenzten Spalten (d. h. Felder) in einer Eingabedatei nicht mit der Anzahl der Spalten in der entsprechenden Tabelle übereinstimmt.
Wenn auf
FALSE
gesetzt, wird kein Fehler erzeugt und die Last wird fortgesetzt. Wenn die Datei erfolgreich geladen wurde:Wenn die Eingabedatei Datensätze mit mehr Feldern als Spalten in der Tabelle enthält, werden die übereinstimmenden Felder in der Reihenfolge ihres Auftretens in der Datei und die restlichen Felder nicht geladen.
Wenn die Eingabedatei Datensätze mit weniger Feldern als Spalten in der Tabelle enthält, werden die nicht übereinstimmenden Spalten in der Tabelle mit NULL-Werten geladen.
Diese Option geht davon aus, dass alle Datensätze innerhalb der Eingabedatei die gleiche Länge haben (d. h. eine Datei mit Datensätzen unterschiedlicher Länge gibt unabhängig vom für diesen Parameter angegebenen Wert einen Fehler zurück).
- Standard:
TRUE
Bemerkung
Bei der Transformation von Daten während des Ladevorgangs (d. h. Verwendung einer Abfrage als Quelle für den Befehl COPY), wird diese Option ignoriert. Es ist nicht erforderlich, dass die Datendateien die gleiche Anzahl und Reihenfolge der Spalten aufweisen wie die Zieltabelle.
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
).
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
EMPTY_FIELD_AS_NULL = TRUE | FALSE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Gibt beim Laden von Daten an, ob für leere Felder einer Eingabedatei, die durch zwei aufeinanderfolgende Trennzeichen (z. B.
,,
) repräsentiert werden, SQL NULL eingefügt werden soll.Wenn der Wert
FALSE
ist, versucht Snowflake, einem leeren Feld den entsprechenden Spaltentyp zuzuweisen. In Spalten vom Typ STRING wird eine leere Zeichenfolge eingefügt. Für andere Spaltentypen generiert der COPY-Befehl einen Fehler.Beim Entladen von Daten wird diese Option in Kombination mit
FIELD_OPTIONALLY_ENCLOSED_BY
verwendet. WennFIELD_OPTIONALLY_ENCLOSED_BY = NONE
festgelegt ist, werden beiEMPTY_FIELD_AS_NULL = FALSE
leere Zeichenfolgen in Tabellen entladen, um leere Zeichenfolgenwerte zu erhalten, ohne dass die Feldwerte in Anführungszeichen eingeschlossen werden.Wenn
TRUE
festgelegt wird, mussFIELD_OPTIONALLY_ENCLOSED_BY
ein Zeichen angeben, das zum Umschließen von Zeichenfolgen verwendet wird.
- Standard:
TRUE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob die BOM (Bytereihenfolge-Marke) übersprungen werden soll, wenn sie in einer Datendatei vorhanden ist. Eine BOM ist ein Zeichencode am Anfang einer Datendatei, der die Bytefolge und die Codierungsform definiert.
Wenn auf
FALSE
gesetzt, erkennt Snowflake alle BOM in Datendateien, was dazu führen kann, dass die BOM entweder einen Fehler verursacht oder in der ersten Spalte der Tabelle zusammengeführt wird.- Standard:
TRUE
ENCODING = 'string'
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Zeichenfolge (Konstante), die den Zeichensatz der Quelldaten beim Laden von Daten in eine Tabelle angibt.
Zeichensatz
ENCODING
-WertUnterstützte Sprachen
Anmerkungen
Big5
BIG5
Traditionelles Chinesisch
EUC-JP
EUCJP
Japanisch
EUC-KR
EUCKR
Koreanisch
GB18030
GB18030
Chinesisch
IBM420
IBM420
Arabisch
IBM424
IBM424
Hebräisch
IBM949
IBM949
Koreanisch
ISO-2022-CN
ISO2022CN
Vereinfachtes Chinesisch
ISO-2022-JP
ISO2022JP
Japanisch
ISO-2022-KR
ISO2022KR
Koreanisch
ISO-8859-1
ISO88591
Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch
ISO-8859-2
ISO88592
Polnisch, Rumänisch, Tschechisch, Ungarisch
ISO-8859-5
ISO88595
Russisch
ISO-8859-6
ISO88596
Arabisch
ISO-8859-7
ISO88597
Griechisch
ISO-8859-8
ISO88598
Hebräisch
ISO-8859-9
ISO88599
Türkisch
ISO-8859-15
ISO885915
Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch
Identisch mit ISO-8859-1, bis auf 8 Zeichen, zu denen auch das Euro-Währungssymbol gehört.
KOI8-R
KOI8R
Russisch
Shift_JIS
SHIFTJIS
Japanisch
UTF-8
UTF8
Alle Sprachen
Zum Laden von Daten aus Dateien mit Trennzeichen (CSV, TSV usw.) ist UTF-8 die Standardeinstellung. . . Beim Laden von Daten aus allen anderen unterstützten Dateiformaten (JSON, Avro usw.) sowie zum Entladen von Daten ist UTF-8 der einzige unterstützte Zeichensatz.
UTF-16
UTF16
Alle Sprachen
UTF-16BE
UTF16BE
Alle Sprachen
UTF-16LE
UTF16LE
Alle Sprachen
UTF-32
UTF32
Alle Sprachen
UTF-32BE
UTF32BE
Alle Sprachen
UTF-32LE
UTF32LE
Alle Sprachen
windows-949
WINDOWS949
Koreanisch
windows-1250
WINDOWS1250
Polnisch, Rumänisch, Tschechisch, Ungarisch
windows-1251
WINDOWS1251
Russisch
windows-1252
WINDOWS1252
Dänisch, Deutsch, Englisch, Französisch, Italienisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch
windows-1253
WINDOWS1253
Griechisch
windows-1254
WINDOWS1254
Türkisch
windows-1255
WINDOWS1255
Hebräisch
windows-1256
WINDOWS1256
Arabisch
- Standard:
UTF8
Bemerkung
Snowflake speichert alle Daten intern im UTF-8-Zeichensatz. Die Daten werden in UTF-8 umgewandelt, bevor sie in Snowflake geladen werden.
TYPE = JSON¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Beim Laden von Daten wird der aktuelle Komprimierungsalgorithmus für die Datendatei angegeben. Snowflake verwendet diese Option, um zu erkennen, wie eine bereits komprimierte Datendatei komprimiert wurde, sodass die komprimierten Daten in der Datei zum Laden extrahiert werden können.
Beim Entladen von Daten wird die Datendatei mit dem angegebenen Komprimierungsalgorithmus komprimiert.
- Werte:
Unterstützte Werte
Anmerkungen
AUTO
Beim Laden von Daten wird der Komprimierungsalgorithmus automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Beim Entladen von Daten werden Dateien automatisch mit der Standardmethode gzip komprimiert.
GZIP
BZ2
BROTLI
Muss beim Laden/Entladen von Brotli-komprimierten Dateien angegeben werden.
ZSTD
Zstandard v0.8 (und höher) wird unterstützt.
DEFLATE
Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).
RAW_DEFLATE
Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Standard:
AUTO
DATE_FORMAT = 'string' | AUTO
- Verwendung:
Nur Laden von Daten
- Definition:
Definiert das Format der Datums-Zeichenfolgenwerte in den Datendateien. Wenn ein Wert nicht angegeben oder
AUTO
ist, wird der Wert des Parameters DATE_INPUT_FORMAT verwendet.Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:
Laden von JSON-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.
Laden von JSON-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).
- Standard:
AUTO
TIME_FORMAT = 'string' | AUTO
- Verwendung:
Nur Laden von Daten
- Definition:
Definiert das Format der Uhrzeit-Zeichenfolgenwerte in den Datendateien. Wenn ein Wert nicht angegeben oder
AUTO
ist, wird der Wert des Parameters TIME_INPUT_FORMAT verwendet.Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:
Laden von JSON-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.
Laden von JSON-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).
- Standard:
AUTO
TIMESTAMP_FORMAT = string' | AUTO
- Verwendung:
Nur Laden von Daten
- Definition:
Definiert das Format der Zeitstempel-Zeichenfolgenwerte in den Datendateien. Wenn ein Wert nicht angegeben oder
AUTO
ist, wird der Wert des Parameters TIMESTAMP_INPUT_FORMAT verwendet.Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:
Laden von JSON-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.
Laden von JSON-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).
- Standard:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
- Verwendung:
Nur Laden von Daten
- Definition:
Definiert das Kodierungsformat für Binärzeichenfolgenwerte in den Datendateien. Die Option kann beim Laden von Daten in binäre Spalten einer Tabelle verwendet werden.
Diese Dateiformatoption wird nur bei folgenden Aktionen angewendet:
Laden von JSON-Daten in separate Spalten unter Verwendung der Kopieroption MATCH_BY_COLUMN_NAME.
Laden von JSON-Daten in separate Spalten durch Angabe einer Abfrage in der COPY-Anweisung (d. h. COPY-Transformation).
- Standard:
HEX
TRIM_SPACE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob vorangestellte und nachstehende Leerzeichen aus Zeichenfolgen entfernt werden sollen.
Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf
TRUE
, um unerwünschte Leerzeichen während des Datenladevorgangs zu entfernen.Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn JSON-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
- Standard:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Verwendung:
Nur Laden von Daten
- Definition:
Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenladequelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas.
Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn JSON-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B.
2
als Wert angegeben wird, werden alle Instanzen von2
entweder in eine Zeichenfolge oder in eine Zahl konvertiert.Beispiel:
NULL_IF = ('N', 'NULL', 'NUL', '')
Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann.
- Standard:
\N
(d. h. NULL mit der Annahme, dass derESCAPE_UNENCLOSED_FIELD
-Wert\
ist)
FILE_EXTENSION = 'string' | NONE
- Verwendung:
Nur Entladen von Daten
- Definition:
Gibt die Erweiterung für Dateien an, die in einen Stagingbereich entladen werden. Akzeptiert jede Erweiterung. Der Benutzer ist dafür verantwortlich, eine Dateiendung anzugeben, die von jeder gewünschten Software oder dem gewünschten Dienst gelesen werden kann.
- Standard:
Null, d. h. die Dateiendung wird durch den Formattyp bestimmt:
.json[compression]
, wobeicompression
die durch das Komprimierungsverfahren hinzugefügte Erweiterung ist, wennCOMPRESSION
gesetzt ist.
ENABLE_OCTAL = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der das Parsen von Oktalzahlen ermöglicht.
- Standard:
FALSE
ALLOW_DUPLICATE = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, dass doppelte Objektfeldnamen erlaubt sind (nur der letzte wird beibehalten).
- Standard:
FALSE
STRIP_OUTER_ARRAY = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der den JSON-Parser anweist, die äußeren Klammern zu entfernen (d. h.
[ ]
).- Standard:
FALSE
STRIP_NULL_VALUES = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der den JSON-Parser anweist, Objektfelder oder Array-Elemente mit
null
-Werten zu entfernen. Zum Beispiel, wenn aufTRUE
gesetzt:Vorher
Nachher
[null]
[]
[null,null,3]
[,,3]
{"a":null,"b":null,"c":123}
{"c":123}
{"a":[1,null,2],"b":{"x":null,"y":88}}
{"a":[1,,2],"b":{"y":88}}
- Standard:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
). Diese Option führt eine 1:1-Zeichenersetzung aus.- Werte:
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
IGNORE_UTF8_ERRORS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob UTF-8-Codierungsfehler Fehlerbedingungen erzeugen. Dies ist eine alternative Syntax für
REPLACE_INVALID_CHARACTERS
.- Werte:
Wenn auf
TRUE
gesetzt, werden alle ungültigen UTF-8-Sequenzen stillschweigend durch das UnicodezeichenU+FFFD
(d. h. „Ersetzungszeichen“) ersetzt.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob die BOM (Bytereihenfolge-Marke) übersprungen werden soll, wenn sie in einer Datendatei vorhanden ist. Eine BOM ist ein Zeichencode am Anfang einer Datendatei, der die Bytefolge und die Codierungsform definiert.
Wenn auf
FALSE
gesetzt, erkennt Snowflake alle BOM in Datendateien, was dazu führen kann, dass die BOM entweder einen Fehler verursacht oder in der ersten Spalte der Tabelle zusammengeführt wird.- Standard:
TRUE
TYPE = AVRO¶
COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Verwendung:
Nur Laden von Daten
- Definition:
Beim Laden von Daten wird der aktuelle Komprimierungsalgorithmus für die Datendatei angegeben. Snowflake verwendet diese Option, um zu erkennen, wie eine bereits komprimierte Datendatei komprimiert wurde, sodass die komprimierten Daten in der Datei zum Laden extrahiert werden können.
Beim Entladen von Daten wird die Datendatei mit dem angegebenen Komprimierungsalgorithmus komprimiert.
- Werte:
Unterstützte Werte
Anmerkungen
AUTO
Beim Laden von Daten wird der Komprimierungsalgorithmus automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Beim Entladen von Daten werden Dateien automatisch mit der Standardmethode gzip komprimiert.
GZIP
BROTLI
Muss beim Laden/Entladen von Brotli-komprimierten Dateien angegeben werden.
ZSTD
Zstandard v0.8 (und höher) wird unterstützt.
DEFLATE
Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).
RAW_DEFLATE
Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Standard:
AUTO
.
Bemerkung
Wir empfehlen die Verwendung der Standardoption AUTO
, da mit dieser sowohl die Datei- als auch die Codec-Komprimierung bestimmt wird. Die Angabe einer Komprimierungsoption bezieht sich auf die Komprimierung von Dateien, nicht auf die Komprimierung von Blöcken (Codecs).
TRIM_SPACE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob vorangestellte und nachstehende Leerzeichen aus Zeichenfolgen entfernt werden sollen.
Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf
TRUE
, um unerwünschte Leerzeichen während des Datenladevorgangs zu entfernen.Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Avro-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
- Standard:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
). Diese Option führt eine 1:1-Zeichenersetzung aus.- Werte:
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Verwendung:
Nur Laden von Daten
- Definition:
Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenladequelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas.
Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Avro-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B.
2
als Wert angegeben wird, werden alle Instanzen von2
entweder in eine Zeichenfolge oder in eine Zahl konvertiert.Beispiel:
NULL_IF = ('N', 'NULL', 'NUL', '')
Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann.
- Standard:
\N
(d. h. NULL mit der Annahme, dass derESCAPE_UNENCLOSED_FIELD
-Wert\
ist)
TYPE = ORC¶
TRIM_SPACE = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob vorangestellte und nachstehende Leerzeichen aus Zeichenfolgen entfernt werden sollen.
Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf
TRUE
, um unerwünschte Leerzeichen während des Datenladevorgangs zu entfernen.Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Orc-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
- Standard:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
). Diese Option führt eine 1:1-Zeichenersetzung aus.- Werte:
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenladequelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas.
Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Orc-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B.
2
als Wert angegeben wird, werden alle Instanzen von2
entweder in eine Zeichenfolge oder in eine Zahl konvertiert.Beispiel:
NULL_IF = ('N', 'NULL', 'NUL', '')
Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann.
- Standard:
\N
(d. h. NULL mit der Annahme, dass derESCAPE_UNENCLOSED_FIELD
-Wert\
ist)
TYPE = PARQUET¶
COMPRESSION = AUTO | LZO | SNAPPY | NONE
- Verwendung:
Laden von Daten, Entladen von Daten und externe Tabellen
- Definition:
Gibt beim Laden von Daten den aktuellen Komprimierungsalgorithmus für Spalten in den Parquet-Dateien an.
Beim Entladen von Daten wird die Datendatei mit dem angegebenen Komprimierungsalgorithmus komprimiert.
- Werte:
Unterstützte Werte
Anmerkungen
AUTO
Beim Laden von Daten wird der Komprimierungsalgorithmus automatisch erkannt. Unterstützt die folgenden Komprimierungsalgorithmen: Brotli, gzip, Lempel-Ziv-Oberhumer (LZO), LZ4, Snappy und Zstandard v0.8 (und höher). . Beim Entladen von Daten werden entladene Dateien standardmäßig mit dem Snappy-Algorithmus komprimiert.
LZO
Beim Entladen von Daten werden Dateien standardmäßig mit dem Snappy-Algorithmus komprimiert. Geben Sie diesen Wert an, wenn Daten in LZO-komprimierte Dateien entladen werden sollen.
SNAPPY
Beim Entladen von Daten werden Dateien standardmäßig mit dem Snappy-Algorithmus komprimiert. Sie können diesen Wert optional angeben.
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Standard:
AUTO
SNAPPY_COMPRESSION = TRUE | FALSE
- Verwendung:
Nur Entladen von Daten
Unterstützte Werte
Anmerkungen
AUTO
Entladene Dateien werden standardmäßig mit dem Komprimierungsalgorithmus Snappy komprimiert.
SNAPPY
Kann angegeben werden, wenn Snappy-komprimierte Dateien entladen werden.
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Definition:
Boolescher Wert, der angibt, ob entladene Dateien mit dem SNAPPY-Algorithmus komprimiert werden.
Bemerkung
Veraltet. Verwenden Sie stattdessen
COMPRESSION = SNAPPY
.- Einschränkungen:
Wird nur für Datenentladevorgänge unterstützt.
- Standard:
TRUE
BINARY_AS_TEXT = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob Spalten ohne definierten logischen Datentyp als UTF-8-Text interpretiert werden sollen. Wenn auf
FALSE
gesetzt, interpretiert Snowflake diese Spalten als Binärdaten.- Standard:
TRUE
Bemerkung
Snowflake empfiehlt, BINARY_AS_TEXT auf FALSE zu setzen, um mögliche Konvertierungsprobleme zu vermeiden.
TRIM_SPACE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob vorangestellte und nachstehende Leerzeichen aus Zeichenfolgen entfernt werden sollen.
Wenn Ihre externe Datenbanksoftware beispielsweise Felder in Anführungszeichen setzt, aber ein führendes Leerzeichen einfügt, liest Snowflake das führende Leerzeichen und nicht das öffnende Anführungszeichen als Anfang des Feldes (d. h. die Anführungszeichen werden als Teil der Zeichenfolge von Felddaten interpretiert). Setzen Sie diese Option auf
TRUE
, um unerwünschte Leerzeichen während des Datenladevorgangs zu entfernen.Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Parquet-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
- Standard:
FALSE
USE_LOGICAL_TYPE = TRUE | FALSE
- Verwendung:
Laden von Daten, Abfragen von Daten in Stagingdateien sowie Schemaerkennung.
- Definition:
Boolescher Wert, der angibt, ob logische Parquet-Typen verwendet werden sollen. Mit dieser Dateiformatoption kann Snowflake beim Laden von Daten logische Parquet-Typen interpretieren. Weitere Informationen dazu finden Sie unter Definitionen für logische Parquet-Typen. Um logische Parquet-Typen zu aktivieren, setzen Sie USE_LOGICAL_TYPE beim Erstellen einer neuen Dateiformatoption auf TRUE.
- Einschränkungen:
Nicht unterstützt für das Entladen von Daten.
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
). Diese Option führt eine 1:1-Zeichenersetzung aus.- Werte:
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- Verwendung:
Nur Laden von Daten
- Definition:
Zeichenfolge, die zum Konvertieren in und von SQL NULL verwendet wird. Snowflake ersetzt diese Zeichenfolgen in der Datenladequelle durch SQL NULL. Um mehr als eine Zeichenfolge anzugeben, schließen Sie die Liste der Zeichenfolgen in Klammern ein und trennen Sie jeden Wert durch Kommas.
Diese Dateiformatoption wird nur dann auf die nachfolgenden Aktionen angewendet, wenn Parquet-Daten mit der Kopieroption MATCH_BY_COLUMN_NAME in separate Spalten geladen werden.
Beachten Sie, dass Snowflake alle Instanzen des Wertes in einen NULL-Wert konvertiert, unabhängig vom Datentyp. Wenn z. B.
2
als Wert angegeben wird, werden alle Instanzen von2
entweder in eine Zeichenfolge oder in eine Zahl konvertiert.Beispiel:
NULL_IF = ('N', 'NULL', 'NUL', '')
Beachten Sie, dass diese Option leere Zeichenfolgen enthalten kann.
- Standard:
\N
(d. h. NULL mit der Annahme, dass derESCAPE_UNENCLOSED_FIELD
-Wert\
ist)
TYPE = XML¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- Verwendung:
Nur Laden von Daten
- Definition:
Beim Laden von Daten wird der aktuelle Komprimierungsalgorithmus für die Datendatei angegeben. Snowflake verwendet diese Option, um zu erkennen, wie eine bereits komprimierte Datendatei komprimiert wurde, sodass die komprimierten Daten in der Datei zum Laden extrahiert werden können.
Beim Entladen von Daten wird die Datendatei mit dem angegebenen Komprimierungsalgorithmus komprimiert.
- Werte:
Unterstützte Werte
Anmerkungen
AUTO
Beim Laden von Daten wird der Komprimierungsalgorithmus automatisch erkannt, mit Ausnahme von Brotli-komprimierten Dateien, die derzeit nicht automatisch erkannt werden können. Beim Entladen von Daten werden Dateien automatisch mit der Standardmethode gzip komprimiert.
GZIP
BZ2
BROTLI
Muss beim Laden/Entladen von Brotli-komprimierten Dateien angegeben werden.
ZSTD
Zstandard v0.8 (und höher) wird unterstützt.
DEFLATE
Deflate-komprimierte Dateien (mit zlib-Header, RFC1950).
RAW_DEFLATE
Raw Deflate-komprimierte Dateien (ohne Header, RFC1951).
NONE
Zeigt beim Laden von Daten an, dass die Dateien nicht komprimiert wurden. Zeigt beim Entladen von Daten an, dass die entladenen Dateien nicht komprimiert werden.
- Standard:
AUTO
IGNORE_UTF8_ERRORS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob UTF-8-Codierungsfehler Fehlerbedingungen erzeugen. Dies ist eine alternative Syntax für
REPLACE_INVALID_CHARACTERS
.- Werte:
Wenn auf
TRUE
gesetzt, werden alle ungültigen UTF-8-Sequenzen stillschweigend durch das UnicodezeichenU+FFFD
(d. h. „Ersetzungszeichen“) ersetzt.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
PRESERVE_SPACE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob der XML-Parser führende und nachstehende Leerzeichen im Elementinhalt beibehält.
- Standard:
FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob der XML-Parser das äußere XML-Element entfernt und Elemente der zweiten Ebene als separate Dokumente anzeigt.
- Standard:
FALSE
DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob der XML-Parser die Erkennung von semistrukturierten Snowflake-Daten-Tags deaktiviert.
- Standard:
FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob der XML-Parser die automatische Konvertierung von numerischen und booleschen Werten von Text in native Darstellung deaktiviert.
- Standard:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- Verwendung:
Laden von Daten und externe Tabellen
- Definition:
Boolescher Wert, der angibt, ob ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen ersetzt werden sollen (
�
). Diese Option führt eine 1:1-Zeichenersetzung aus.- Werte:
Bei Einstellung auf
TRUE
ersetzt Snowflake ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.Bei Einstellung auf
FALSE
gibt die Ladeoperation einen Fehler aus, wenn eine ungültige UTF-8-Zeichencodierung erkannt wird.- Standard:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob eine BOM (Byte-Reihenfolgemarke) in einer Eingabedatei übersprungen werden soll. Eine BOM ist ein Zeichencode am Anfang einer Datendatei, der die Bytefolge und die Codierungsform definiert.
Wenn auf
FALSE
gesetzt, erkennt Snowflake alle BOM in Datendateien, was dazu führen kann, dass die BOM entweder einen Fehler verursacht oder in der ersten Spalte der Tabelle zusammengeführt wird.- Standard:
TRUE
Kopieroptionen (copyOptions
)¶
Kopieroptionen werden zum Laden von Daten in und Entladen von Daten aus Tabellen verwendet.
Sie können eine oder mehrere der folgenden Kopieroptionen angeben (durch Leerzeichen, Kommas oder Neue-Zeile-Zeichen getrennt):
ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT
- Verwendung:
Nur Laden von Daten
- Definition:
Zeichenfolge (Konstante), die die Fehlerbehandlung für die Ladeoperation angibt.
Wichtig
Prüfen Sie sorgfältig den Wert der ON_ERROR-Kopieroption. Der Standardwert ist in vielen Fällen angemessen, aber nicht immer die beste Option.
- Werte:
CONTINUE
Bei Erkennen eines Fehlers wird mit dem Laden der Datei fortgefahren. Die COPY-Anweisung gibt eine Fehlermeldung für maximal einen gefundenen Fehler pro Datendatei zurück.
Beachten Sie, dass der Unterschied zwischen den Spaltenwerten ROWS_PARSED und ROWS_LOADED die Anzahl der Zeilen darstellt, die erkannte Fehler enthalten. Jede dieser Zeilen kann jedoch mehrere Fehler enthalten. Um alle Fehler in den Datendateien anzuzeigen, können Sie den Parameter VALIDATION_MODE verwenden oder die Funktion VALIDATE abfragen.
SKIP_FILE
Bei Erkennen eines Fehlers wird die Datei übersprungen.
Beachten Sie, dass bei der Aktion
SKIP_FILE
die gesamte Datei im Puffer gespeichert wird, unabhängig davon, ob Fehler gefunden werden oder nicht. Aus diesem Grund istSKIP_FILE
langsamer alsCONTINUE
oderABORT_STATEMENT
. Das Überspringen von Dateien bei nur wenigen Fehlern kann zu Verzögerungen und zur Vergeudung von Credits führen. Wenn Sie eine große Anzahl von Datensätzen aus Dateien laden, die keine logische Abgrenzung haben (z. B. weil die Dateien automatisch in groben Abständen generiert wurden), sollten Sie stattdessenCONTINUE
angeben.Zusätzliche Muster:
SKIP_FILE_num
(z. B.SKIP_FILE_10
)Überspringt die Datei, wenn die Anzahl der in der Datei gefundenen Fehlerzeilen gleich oder größer als die hier angegebene Anzahl ist.
'SKIP_FILE_num%'
(z. B.'SKIP_FILE_10%'
)Überspringt die Datei, wenn der Prozentsatz der in der Datei gefundenen Fehlerzeilen den hier angegebenen Prozentsatz überschreitet.
ABORT_STATEMENT
Bricht die Ladeoperation ab, wenn in einer Datendatei ein Fehler gefunden wird.
Beachten Sie, dass die Ladeoperation nicht abgebrochen wird, wenn die Datendatei nicht gefunden werden kann (z. B. weil sie nicht vorhanden ist oder nicht auf sie zugegriffen werden kann), außer eine explizit im Parameter
FILES
angegebene Datendatei kann nicht gefunden werden.
- Standard:
- Massenladen mit COPY:
ABORT_STATEMENT
- Snowpipe:
SKIP_FILE
SIZE_LIMIT = num
- Verwendung:
Nur Laden von Daten
- Definition:
Zahl (>0), die die maximale Größe (in Byte) der zu ladenden Daten für eine gegebene COPY-Anweisung angibt. Wenn der Schwellenwert überschritten wird, stoppt die Operation COPY das Laden von Dateien. Diese Option wird häufig verwendet, um eine gemeinsame Gruppe von Dateien mit mehreren COPY-Anweisungen zu laden. Für jede Anweisung wird die Datenladung fortgesetzt, bis das angegebene
SIZE_LIMIT
überschritten ist und bevor zur nächsten Anweisung übergegangen wird.Angenommen, eine Gruppe von Dateien in einem Stagingbereichspfad wäre jeweils 10 MB groß. Wenn mehrere COPY-Anweisungen SIZE_LIMIT auf
25000000
(25 MB) setzen, würde jede 3 Dateien laden. Das heißt, jede COPY-Operation würde nach Überschreiten desSIZE_LIMIT
-Schwellenwerts abbrechen.Beachten Sie, dass mindestens eine Datei unabhängig von dem für
SIZE_LIMIT
angegebenen Wert geladen wird, es sei denn, es ist keine Datei zu laden.- Standard:
Null (keine Größenbeschränkung)
PURGE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob die Datendateien nach erfolgreichem Laden der Daten automatisch aus dem Stagingbereich entfernt werden sollen.
Wenn diese Option auf
TRUE
gesetzt ist, erfolgt das Entfernen der erfolgreich geladenen Datendateien nach besten Kräften. Beachten Sie aber, dass derzeit kein Fehler zurückgegeben wird, wenn die Löschoperation aus irgendeinem Grund fehlschlägt. Wir empfehlen daher, dass Sie die im Stagingbereich befindlichen Dateien regelmäßig auflisten (mit LIST) und erfolgreich geladene Dateien ggf. manuell entfernen.- Standard:
FALSE
RETURN_FAILED_ONLY = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, ob nur Dateien zurückgegeben werden sollen, die nicht in das Anweisungsergebnis geladen wurden.
- Standard:
FALSE
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
- Verwendung:
Nur Laden von Daten
- Definition:
Zeichenfolge, die angibt, ob semistrukturierte Daten in Spalten der Zieltabelle geladen werden sollen, die den in den Daten dargestellten Spalten entsprechen.
Diese Kopieroption wird für die folgenden Datenformate unterstützt:
JSON
Avro
ORC
Parquet
Damit eine Spalte übereinstimmt, muss Folgendes zutreffen:
Die in den Daten dargestellte Spalte muss exakt den gleichen Namen haben wie die Spalte in der Tabelle. Die Kopieroption unterstützt die Groß- und Kleinschreibung von Spaltennamen. Die Spaltenreihenfolge spielt keine Rolle.
Die Spalte in der Tabelle muss einen Datentyp haben, der mit den Werten in der in den Daten dargestellten Spalte kompatibel ist. Beispielsweise können Zeichenfolgen-, Zahlen- und Boolesche Werte in eine Variant-Spalte geladen werden.
- Werte:
CASE_SENSITIVE
|CASE_INSENSITIVE
Laden Sie semistrukturierte Daten in Spalten der Zieltabelle, die den in den Daten dargestellten Spalten entsprechen. Spaltennamen können zwischen Groß- und Kleinschreibung unterscheiden (
CASE_SENSITIVE
) oder nicht unterscheiden (CASE_INSENSITIVE
).Die COPY-Operation überprüft, ob mindestens eine Spalte in der Zieltabelle mit einer in den Datendateien dargestellten Spalte übereinstimmt. Wenn eine Übereinstimmung gefunden wird, werden die Werte der Datendateien in die entsprechenden Spalten geladen. Wenn keine Übereinstimmung gefunden wird, wird für jeden Datensatz in den Dateien ein Satz von NULL-Werten in die Tabelle geladen.
Bemerkung
Wenn in den Datendateien weitere, nicht übereinstimmende Spalten vorhanden sind, werden die Werte in diesen Spalten nicht geladen.
Wenn die Zieltabelle weitere, nicht übereinstimmende Spalten enthält, fügt die COPY-Operation in diese Spalten NULL-Werte ein. Diese Spalten müssen NULL-Werte unterstützen.
In der COPY-Anweisung darf keine Abfrage zur weiteren Transformation der Daten während des Ladevorgangs (d. h. COPY-Transformation) angegeben werden.
NONE
Die COPY-Operation lädt die semistrukturierten Daten in eine Variant-Spalte oder transformiert die Daten, wenn in der COPY-Anweisung eine Abfrage enthalten ist.
Bemerkung
Derzeit gelten folgende Einschränkungen:
MATCH_BY_COLUMN_NAME kann nicht mit dem Parameter
VALIDATION_MODE
in einer COPY-Anweisung verwendet werden, um die Stagingdaten zu überprüfen, anstatt sie in die Zieltabelle zu laden.Nur Parquet-Daten. Wenn MATCH_BY_COLUMN_NAME auf
CASE_SENSITIVE
oderCASE_INSENSITIVE
gesetzt ist, führt ein leerer Spaltenwert (z. B."col1": ""
) zu einem Fehler.
- Standard:
NONE
ENFORCE_LENGTH = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Alternative Syntax für
TRUNCATECOLUMNS
mit umgekehrter Logik (zur Kompatibilität mit anderen Systemen)Boolescher Wert, der angibt, ob Textzeichenfolgen, die die Länge der Zielspalte überschreiten, abgeschnitten werden sollen:
Wenn auf
TRUE
gesetzt, generiert die COPY-Anweisung beim Überschreiten der Länge der Zielspalte einen Fehler.Wenn auf
FALSE
gesetzt, werden Zeichenfolgen automatisch auf die Länge der Zielspalte abgeschnitten.
Diese Kopieroption unterstützt CSV-Daten sowie Zeichenfolgenwerte in semistrukturierten Daten, wenn sie in separate Spalten von relationalen Tabellen geladen werden.
Bemerkung
Wenn die Länge der Spalte für die Zielzeichenfolge auf das Maximum eingestellt ist (z. B.
VARCHAR (16777216)
), kann eine eingehende Zeichenfolge diese Länge nicht überschreiten, andernfalls generiert der COPY-Befehl einen Fehler.Dieser Parameter entspricht funktional dem Parameter
TRUNCATECOLUMNS
, weist aber das umgekehrte Verhalten auf. Dies wird aus Gründen der Kompatibilität mit anderen Datenbanken bereitgestellt. Zum Erzeugen der gewünschten Ausgabe muss nur einer der beiden Parameter in eine COPY-Anweisung aufgenommen werden.
- Standard:
TRUE
TRUNCATECOLUMNS = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Alternative Syntax für
ENFORCE_LENGTH
mit umgekehrter Logik (zur Kompatibilität mit anderen Systemen)Boolescher Wert, der angibt, ob Textzeichenfolgen, die die Länge der Zielspalte überschreiten, abgeschnitten werden sollen:
Wenn auf
TRUE
gesetzt, werden Zeichenfolgen automatisch auf die Länge der Zielspalte abgeschnitten.Wenn auf
FALSE
gesetzt, generiert die COPY-Anweisung beim Überschreiten der Länge der Zielspalte einen Fehler.
Diese Kopieroption unterstützt CSV-Daten sowie Zeichenfolgenwerte in semistrukturierten Daten, wenn sie in separate Spalten von relationalen Tabellen geladen werden.
Bemerkung
Wenn die Länge der Spalte für die Zielzeichenfolge auf das Maximum eingestellt ist (z. B.
VARCHAR (16777216)
), kann eine eingehende Zeichenfolge diese Länge nicht überschreiten, andernfalls generiert der COPY-Befehl einen Fehler.Dieser Parameter entspricht funktional dem Parameter
ENFORCE_LENGTH
, weist aber das umgekehrte Verhalten auf. Dies wird aus Gründen der Kompatibilität mit anderen Datenbanken bereitgestellt. Zum Erzeugen der gewünschten Ausgabe muss nur einer der beiden Parameter in eine COPY-Anweisung aufgenommen werden.
- Standard:
FALSE
FORCE = TRUE | FALSE
- Verwendung:
Nur Laden von Daten
- Definition:
Boolescher Wert, der angibt, dass alle Dateien geladen werden sollen, unabhängig davon, ob sie bereits zuvor geladen und seitdem nicht geändert wurden. Beachten Sie, dass diese Option Dateien neu lädt und möglicherweise Daten in einer Tabelle dupliziert.
- Standard:
FALSE
Nutzungshinweise¶
Änderungen an einer Tabelle werden nicht automatisch an Ansichten weitergegeben, die für diese Tabelle erstellt wurden. Wenn Sie beispielsweise eine Spalte in einer Tabelle löschen und eine Ansicht so definiert ist, dass sie diese Spalte enthält, wird die Ansicht ungültig. Die Ansicht wird nicht angepasst, um die Spalte zu entfernen.
Durch das Löschen einer Spalte wird der Speicherplatz der Spalte nicht sofort freigegeben.
Der Speicherplatz in jeder Mikropartition wird erst freigegeben, wenn diese Mikropartition neu geschrieben wird. Schreiboperationen (Einfügen, Aktualisieren, Löschen usw.) auf einer oder mehreren Zeilen dieser Mikropartition bewirken, dass die Mikropartition neu geschrieben wird. Wenn Sie das Freigeben von Speicherplatz erzwingen möchten, können Sie folgende Schritte ausführen:
Verwenden Sie eine CREATE TABLE AS SELECT (CTAS)-Anweisung, um eine neue Tabelle zu erstellen, die nur die Spalten der alten Tabelle enthält, die Sie behalten möchten.
Setzen Sie den Parameter DATA_RETENTION_TIME_IN_DAYS für die alte Tabelle auf
0
(optional).Löschen Sie die alte Tabelle.
Wenn die Tabelle durch das Time Travel-Feature geschützt ist, wird der vom Time Travel-Speicher verwendete Speicherplatz erst nach Ablauf der Time Travel-Aufbewahrungsfrist freigegeben.
Wenn eine neue Spalte mit einem Standardwert zu einer Tabelle mit vorhandenen Zeilen hinzugefügt wird, werden alle vorhandenen Zeilen mit dem Standardwert gefüllt.
Das Hinzufügen einer neuen Spalte mit einem Standardwert, der eine Funktion enthält, wird derzeit nicht unterstützt. Der folgende Fehler wird zurückgegeben:
Invalid column default expression (expr)
Um eine Tabelle zu ändern, müssen Sie eine Rolle verwenden, die über Eigentümerrechte für die Tabelle verfügt.
Für das Hinzufügen von Clustering zu einer Tabelle müssen Sie auch über USAGE- oder OWNERSHIP-Berechtigungen für das Schema und die Datenbank verfügen, die die Tabelle enthalten.
Bei Maskierungsrichtlinien:
Die
USING
-Klausel und das SchlüsselwortFORCE
sind beide optional, d. h. beide sind nicht erforderlich, um eine Maskierungsrichtlinie für eine Spalte festzulegen. DieUSING
-Klausel und das SchlüsselwortFORCE
können einzeln oder zusammen verwendet werden. Weitere Details dazu finden Sie unter:Eine einzelne Maskierungsrichtlinie, die bedingte Spalten verwendet, kann auf mehrere Tabellen angewendet werden, sofern die Spaltenstruktur der Tabelle mit den in der Richtlinie angegebenen Spalten übereinstimmt.
Wenn Sie eine oder mehrere Tabellenspalten mit Maskierungsrichtlinie oder die Tabelle selbst mit Zeilenzugriffsrichtlinie ändern, können Sie mit der Funktion POLICY_CONTEXT eine Abfrage auf den mit einer Maskierungsrichtlinie geschützten Spalten bzw. auf der mit einer Zeilenzugriffsrichtlinie geschützten Tabelle simulieren.
Für Zeilenzugriffsrichtlinien:
Snowflake unterstützt das Hinzufügen und Löschen von Zeilenzugriffsrichtlinien mit einer einzigen SQL-Anweisung.
Wenn Sie z. B. eine bereits für eine Tabelle festgelegte Zeilenzugriffsrichtlinie durch eine andere Richtlinie ersetzen möchten, müssen Sie zuerst die Zeilenzugriffsrichtlinie löschen und dann die neue Zeilenzugriffsrichtlinie hinzufügen.
Für eine gegebene Ressource (d. h. Tabelle oder Ansicht) müssen Sie für ein
ADD
oderDROP
der Zeilenzugriffsrichtlinie entweder über die APPLY ROW ACCESS POLICY-Berechtigung für das Schema oder über die OWNERSHIP-Berechtigung für die Ressource und die APPLY-Berechtigung für die Ressource der Zeilenzugriffsrichtlinie verfügen.Eine Tabelle oder Ansicht kann nur durch jeweils eine einzige Zeilenzugriffsrichtlinie geschützt werden. Das Hinzufügen einer Richtlinie schlägt fehl, wenn sich der Richtlinientext auf eine Tabellen- oder Ansichtsspalte bezieht, die durch eine Zeilenzugriffsrichtlinie geschützt ist, oder auf eine Spalte, die durch eine Maskierungsrichtlinie geschützt ist.
In ähnlicher Weise schlägt das Hinzufügen einer Maskierungsrichtlinie zu einer Tabellenspalte fehl, wenn der Richtlinientext der Maskierungsrichtlinie auf eine Tabelle verweist, die durch eine Zeilenzugriffsrichtlinie oder eine andere Maskierungsrichtlinie geschützt ist.
Zeilenzugriffsrichtlinien können nicht auf systemspezifische Ansichten oder Tabellenfunktionen angewendet werden.
Ähnlich wie bei anderen DROP <Objekt>-Operationen gibt Snowflake einen Fehler zurück, wenn versucht wird, eine Zeilenzugriffsrichtlinie aus einer Ressource zu löschen, der keine Zeilenzugriffsrichtlinie hinzugefügt wurde.
Wenn ein Objekt sowohl eine Zeilenzugriffsrichtlinie als auch eine oder mehrere Maskierungsrichtlinien hat, wird die Zeilenzugriffsrichtlinie zuerst ausgewertet.
Wenn Sie einen Fremdschlüssel erstellen, müssen die Spalten in der
REFERENCES
-Klausel in der gleichen Reihenfolge aufgelistet werden, wie die Spalten für den Primärschlüssel aufgelistet wurden. Beispiel:create table parent ... constraint primary_key_1 primary key (c_1, c_2) ... create table child ... constraint foreign_key_1 foreign key (...) REFERENCES parent (c_1, c_2) ...
In beiden Fällen ist die Reihenfolge der Spalten
c_1, c_2
. Wäre die Reihenfolge der Spalten im Fremdschlüssel eine andere gewesen (z. B.c_2, c_1
), wäre der Versuch, den Fremdschlüssel zu erstellen, fehlgeschlagen.
Metadaten:
Achtung
Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.
ALTER TABLE … CHANGE_TRACKING = TRUE
Wenn eine Tabelle geändert wird, um die Änderungsverfolgung zu aktivieren, wird die Tabelle für die Dauer der Operation gesperrt. Sperren können bei einigen damit verbundenen DDL/DML-Operationen eine Latenz verursachen. Weitere Informationen dazu finden Sie unter Ressourcensperrung.
Indizes in Hybridtabellen:
Wenn Sie den Befehl ALTER TABLE verwenden, um eine eindeutige Einschränkung oder eine Fremdschlüssel-Einschränkung zu einer Hybridtabelle hinzuzufügen oder zu löschen, wird der entsprechende Index ebenfalls erstellt bzw. gelöscht. Weitere Informationen zu Indizes in einer Hybridtabelle finden Sie unter CREATE INDEX.
Fremdschlüssel-Einschränkungen werden nur für Hybridtabellen unterstützt, die in derselben Datenbank gespeichert sind. Die Möglichkeit, eine Hybridtabelle von einer Datenbank in eine andere zu verschieben, wird nicht unterstützt. Bei Einschränkungen für Primärschlüssel, eindeutige Schlüssel und Fremdschlüssel, die für Hybridtabellen definiert sind, ist das RELY-Feld mit
TRUE
markiert.Eine Spalte, die von einem Index verwendet wird, kann erst gelöscht werden, wenn zuvor der entsprechende Index gelöscht wurde.
Beispiele¶
Die folgenden Abschnitte enthalten Beispiele für die Verwendung des ALTER COLUMN-Befehls:
Umbenennen einer Tabelle¶
Eine Tabelle namens t1
wird wie folgt erstellt:
CREATE OR REPLACE TABLE t1(a1 number);
SHOW TABLES LIKE 't1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
Die folgende Anweisung ändert den Namen der Tabelle in tt1
:
ALTER TABLE t1 RENAME TO tt1;
SHOW TABLES LIKE 'tt1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | TT1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
Austauschen von Tabellen¶
Die folgenden Anweisungen erstellen Tabellen mit den Namen t1
und t2
:
CREATE OR REPLACE TABLE t1(a1 NUMBER, a2 VARCHAR, a3 DATE);
CREATE OR REPLACE TABLE t2(b1 VARCHAR);
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Die folgende Anweisung vertauscht Tabelle t1
mit Tabelle t2
:
ALTER TABLE t1 SWAP WITH t2;
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Hinzufügen von Spalten¶
Eine Tabelle namens t1
wird wie folgt erstellt:
CREATE OR REPLACE TABLE t1(a1 NUMBER);
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Die folgende Anweisung fügt eine Spalte mit dem Namen a2
zu dieser Tabelle hinzu:
ALTER TABLE t1 ADD COLUMN a2 NUMBER;
Die folgende Anweisung fügt eine Spalte namens a3
mit einer NOT NULL-Einschränkung hinzu:
ALTER TABLE t1 ADD COLUMN a3 NUMBER NOT NULL;
Die folgende Anweisung fügt eine Spalte namens a4
mit einem Standardwert und einer NOT NULL-Einschränkung hinzu:
ALTER TABLE t1 ADD COLUMN a4 NUMBER DEFAULT 0 NOT NULL;
Die folgende Anweisung fügt eine VARCHAR-Spalte namens a5
mit einer sprachspezifischen Sortierungsspezifikation hinzu:
ALTER TABLE t1 ADD COLUMN a5 VARCHAR COLLATE 'en_US';
DESC TABLE t1;
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
| A5 | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Die folgende Anweisung verwendet die IF NOT EXISTS-Klausel, um eine Spalte mit dem Namen a2
nur dann hinzuzufügen, wenn die Spalte nicht existiert. Es gibt bereits eine Spalte mit dem Namen a2
. Durch die Angabe der IF NOT EXISTS-Klausel wird verhindert, dass die Anweisung mit einem Fehler fehlschlägt.
ALTER TABLE t1 ADD COLUMN IF NOT EXISTS a2 NUMBER;
Wie die Ausgabe des Befehls DESCRIBE TABLE zeigt, hat die obige Anweisung keine Auswirkung auf die vorhandene Spalte namens a2
:
DESC TABLE t1;
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
| A5 | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Umbenennen von Spalten¶
Die folgende Anweisung ändert den Namen der Spalte a1
in b1
:
ALTER TABLE t1 RENAME COLUMN a1 TO b1;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Löschen von Spalten¶
Die folgende Anweisung löscht die Spalte a2
:
ALTER TABLE t1 DROP COLUMN a2;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Die folgende Anweisung verwendet die IF EXISTS-Klausel, um eine Spalte mit dem Namen a2
nur dann zu löschen, wenn die Spalte existiert. Es gibt keine existierende Spalte mit dem Namen a2
. Durch die Angabe der IF EXISTS-Klausel wird verhindert, dass die Anweisung mit einem Fehler fehlschlägt.
ALTER TABLE t1 DROP COLUMN IF EXISTS a2;
Wie die Ausgabe des Befehls DESCRIBE TABLE zeigt, hat die obige Anweisung keine Auswirkungen auf die bestehende Tabelle:
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
Hinzufügen, Umbenennen und Löschen von Spalten in einer externen Tabelle¶
Die folgende Anweisung erstellt eine externe Tabelle mit dem Namen exttable1
:
CREATE EXTERNAL TABLE exttable1
LOCATION=@mystage/logs/
AUTO_REFRESH = true
FILE_FORMAT = (TYPE = PARQUET)
;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
Die folgende Anweisung fügt eine neue Spalte mit dem Namen a1
in die externe Tabelle ein:
ALTER TABLE exttable1 ADD COLUMN a1 VARCHAR AS (value:a1::VARCHAR);
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| A1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
Die folgende Anweisung ändert den Namen der Spalte a1
in b1
:
ALTER TABLE exttable1 RENAME COLUMN a1 TO b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| B1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
Die folgende Anweisung löscht die Spalte namens b1
:
ALTER TABLE exttable1 DROP COLUMN b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
Ändern der Reihenfolge der Gruppierungsschlüssel¶
Die folgende Anweisung erstellt eine Tabelle namens t1
, die nach den Spalten id
und date
geclustert wird:
CREATE OR REPLACE TABLE T1 (id NUMBER, date TIMESTAMP_NTZ, name STRING) CLUSTER BY (id, date);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (ID,DATE) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Die folgende Anweisung ändert die Reihenfolge des Gruppierungsschlüssels:
ALTER TABLE t1 CLUSTER BY (date, id);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (DATE,ID) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Hinzufügen und Entfernen von Zeilenzugriffsrichtlinien¶
Das folgende Beispiel fügt eine Zeilenzugriffsrichtlinie zu einer Tabelle unter Angabe einer einzelnen Spalte hinzu. Nach dem Einstellen der Richtlinie können Sie diese durch Überprüfen des Information Schema verifizieren.
alter table t1 add row access policy rap_t1 on (empl_id);
Das folgende Beispiel fügt eine Zeilenzugriffsrichtlinie unter Angabe von zwei Spalten in einer einzelnen Tabelle hinzu.
alter table t1 add row access policy rap_test2 on (cost, item);
Im folgenden Beispiel wird eine Zeilenzugriffsrichtlinie aus einer Tabelle entfernt. Überprüfen Sie, ob die Richtlinien gelöscht wurden, indem Sie das Information Schema abfragen.
alter table t1 drop row access policy rap_v1;
Das folgende Beispiel zeigt, wie Sie das Hinzufügen und Löschen von Zeilenzugriffsrichtlinien in einer einzigen SQL-Anweisung für eine Tabelle kombinieren. Überprüfen Sie die Ergebnisse, indem Sie das Information Schema überprüfen.
alter table t1 drop row access policy rap_t1_version_1, add row access policy rap_t1_version_2 on (empl_id);