# INSERT INTO
Fügt Daten in eine Tabelle ein.
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
Sie können eine Liste von Spalten angeben, die mit (c1, c2, c3) eingefügt werden sollen.
Beispielweise betrachten wir die Tabelle:
SHOW CREATE insert_table;
CREATE TABLE insert_table
(
`a` Int8,
`b` String,
`c` Int8
)
ENGINE = MergeTree()
ORDER BY a
INSERT INTO insert_table (*) VALUES (1, 'a', 1) ;
# Einfügen der Ergebnisse von SELECT
Um die Ergebnisse, die von der SELECT-Anweisung zurückgegeben werden, als Werte für die INSERT INTO-Anweisung zu verwenden, verwenden Sie die folgende Anweisung:
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
Die Spalten werden entsprechend ihrer Position in der SELECT-Klausel zugeordnet. Ihre Namen in der SELECT-Expression und in der Tabelle für INSERT können jedoch unterschiedlich sein. Falls erforderlich, wird eine Typumwandlung durchgeführt.
Beispielweise betrachten wir die Tabelle data
mit den folgenden Daten.
SELECT * FROM data
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 2 │ a │ 3 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 2 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 3 │
└───┴───┴───┘
Fügen Sie die Daten aus der Tabelle data
in die Tabelleinsert_table
ein.
INSERT INTO insert_table (*) SELECT
a,
b,
c
FROM data
Zeigen Sie die Daten in der aktuellen Tabelleinsert_table
an.
SELECT *
FROM insert_table
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
│ 1 │ a │ 2 │
│ 1 │ a │ 3 │
│ 2 │ a │ 3 │
└───┴───┴───┘
# Verwendung der s3-Tabellenfunktion mit INSERT INTO
MyScale unterstützt die s3-Tabellenfunktion (opens new window). Sie können die s3-Tabellenfunktion verwenden, um Daten von/zu Speicherdiensten zu importieren/exportieren, die mit Amazon S3 kompatibel sind.
Syntax
s3(path [, NOSIGN | aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])
Argumente
path
- Bucket-URL mit Pfad zur Datei. Unterstützt folgende Platzhalter im Nur-Lese-Modus:*
,?
,{abc,def}
und{N..M}
, wobeiN
,M
- Zahlen,'abc'
,'def'
- Zeichenketten. Weitere Informationen finden Sie hier (opens new window).NOSIGN
- Wenn dieses Schlüsselwort anstelle von Anmeldeinformationen angegeben wird, werden alle Anfragen nicht signiert.format
- Das Format (opens new window) der Datei.structure
- Struktur der Tabelle. Format'column1_name column1_type, column2_name column2_type, ...'
.compression
- Parameter ist optional. Unterstützte Werte:none
,gzip/gz
,brotli/br
,xz/LZMA
,zstd/zst
. Standardmäßig wird die Komprimierung anhand der Dateierweiterung automatisch erkannt.
Rückgabewert
Eine Tabelle mit der angegebenen Struktur zum Lesen oder Schreiben von Daten in der angegebenen Datei.
# Einfügen von Daten aus einer S3-Datei
Im Folgenden finden Sie ein Beispiel zum Importieren von Daten aus S3 mithilfe der s3-Tabellenfunktion.
Erstellen Sie eine Tabelle zum Speichern von Daten.
CREATE TABLE default.myscale_categorical_search
(
id UInt32,
data Array(Float32),
CONSTRAINT check_length CHECK length(data) = 128,
date Date,
label Enum8('person' = 1, 'building' = 2, 'animal' = 3)
) ENGINE = MergeTree ORDER BY id
Fügen Sie die Daten aus der S3-Datei https://d3lhz231q7ogjd.cloudfront.net/sample-datasets/quick-start/categorical-search.csv (opens new window) ein:
INSERT INTO default.myscale_categorical_search
SELECT * FROM s3(
'https://d3lhz231q7ogjd.cloudfront.net/sample-datasets/quick-start/categorical-search.csv',
'CSVWithNames',
'id UInt32, data Array(Float32), date Date, label Enum8(''person'' = 1, ''building'' = 2, ''animal'' = 3)'
)
# Exportieren von Daten nach S3 mit INSERT INTO
Die s3-Tabellenfunktion kann auch verwendet werden, um Daten von MyScale nach S3 zu exportieren.
INSERT INTO FUNCTION s3(
'https://your-s3-bucket.s3.amazonaws.com/categorical-search.parquet',
'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY',
'Parquet')
SELECT * FROM default.myscale_categorical_search LIMIT 1000
In obigem Beispiel gibt https://your-s3-bucket.s3.amazonaws.com/categorical-search.csv
den Pfad im S3-Speicherbucket an, in dem die Daten geschrieben werden. Die Parameter AWS_ACCESS_KEY_ID
und AWS_SECRET_ACCESS_KEY
geben den AWS-Zugriffsschlüssel und den geheimen Schlüssel an, die zum Zugriff auf den S3-Speicherbucket erforderlich sind. Der Parameter Parquet
gibt an, dass die Daten im Parquet-Format in den S3-Speicherbucket geschrieben werden und den Inhalt aller Felder aus den ersten 1000 Zeilen der Tabelle default.myscale_categorical_search
enthalten.
Wenn zu viele Daten exportiert werden müssen, können die Daten mit verschiedenen Partitionierungsoptionen in MyScale aufgeteilt und exportiert werden. Im folgenden Beispiel erstellen wir zehn Dateien mit Hilfe des Modulo-Operators der Funktion rand()
. Beachten Sie, wie die resultierende Partition-ID im Dateinamen referenziert wird. Dadurch entstehen zehn Dateien mit einer numerischen Endung, z.B. categorical-search_0.parquet
, categorical-search_1.parquet
, usw.
INSERT INTO FUNCTION s3(
'https://your-s3-bucket.s3.amazonaws.com/categorical-search_{_partition_id}.parquet',
'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY',
'Parquet')
PARTITION BY rand() % 10
SELECT * FROM default.myscale_categorical_search