# 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 datain die Tabelleinsert_table ein.

INSERT INTO insert_table (*) SELECT
    a,
    b,
    c
FROM data

Zeigen Sie die Daten in der aktuellen Tabelleinsert_tablean.

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}, wobei N, 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