Laden und Entladen von Parquet-Daten¶
In diesem Tutorial wird beschrieben, wie Sie Parquet-Daten hochladen können, indem Sie Elemente einer im Stagingbereich bereitgestellten Parquet-Datei mit dem Befehl COPY INTO <Tabelle> direkt in Tabellenspalten transformieren. Das Tutorial beschreibt auch, wie Sie den Befehl COPY INTO <Speicherort> verwenden können, um Tabellendaten in eine Parquet-Datei zu entladen.
Unter diesem Thema:
Voraussetzungen¶
Für dieses Tutorial müssen Sie Folgendes tun:
Herunterladen einer von Snowflake bereitgestellten Parquet-Datendatei.
Erstellen einer Datenbank, einer Tabelle und eines virtuellen Warehouses.
Datenbank, Tabelle und virtuelles Warehouse sind grundlegende Snowflake-Objekte, die für die meisten Snowflake-Aktivitäten benötigt werden.
Herunterladen der Beispieldatendatei¶
Laden Sie die Parquet-Beispieldatendatei herunter, indem Sie aus cities.parquet
klicken. Alternativ können Sie auch mit der rechten Maustaste auf den Link klicken und den Link/die Datei in Ihrem lokalen Dateisystem speichern.
Das Tutorial setzt voraus, dass Sie die Dateien in die folgenden Verzeichnisse entpackt haben:
Linux/macOS:
/tmp/load
Windows:
C:\tempload
Die Parquet-Datendatei enthält Beispieldaten zum Kontinent („continent“). Das folgende Beispiel ist repräsentativ:
{
"continent": "Europe",
"country": {
"city": [
"Paris",
"Nice",
"Marseilles",
"Cannes"
],
"name": "France"
}
}
Erstellen von Datenbank, Tabelle und virtuellem Warehouse¶
Mit dem folgenden Skript werden Objekte speziell für die Verwendung mit diesem Tutorial erstellt. Wenn Sie das Tutorial abgeschlossen haben, können Sie diese Objekte wieder löschen.
create or replace database mydatabase;
use schema mydatabase.public;
create or replace temporary table cities (
continent varchar default null,
country varchar default null,
city variant default null
);
create or replace warehouse mywarehouse with
warehouse_size='X-SMALL'
auto_suspend = 120
auto_resume = true
initially_suspended=true;
use warehouse mywarehouse;
Beachten Sie, dass diese Befehle eine temporäre Tabelle erstellen. Eine temporäre Tabelle bleibt nur für die Dauer der Benutzersitzung bestehen, in der sie erstellt wurde. Sie ist für andere Benutzer nicht sichtbar.
Schritt 1: Dateiformatobjekt erstellen¶
Führen Sie den Befehl CREATE FILE FORMAT aus, um das Dateiformat sf_tut_parquet_format
zu erstellen.
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format
TYPE = parquet;
TYPE = 'parquet'
gibt den Dateiformattyp der Quelldatei an. CSV ist der Standard-Dateiformattyp.
Schritt 2: Stagingobjekt erstellen¶
Führen Sie den Befehl CREATE STAGE aus, um den internen Stagingbereich sf_tut_stage
zu erstellen.
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
FILE_FORMAT = sf_tut_parquet_format;
Ähnlich wie bei temporären Tabellen werden temporäre Stagingbereiche am Ende der Sitzung automatisch gelöscht.
Schritt 3: Datendatei im Stagingbereich bereitstellen¶
Führen Sie den PUT-Befehl aus, um die Parquet-Datei aus Ihrem lokalen Dateisystem in den benannten Stagingbereich hochzuladen.
Linux oder macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
Schritt 4: Daten in die Zieltabelle kopieren¶
Kopieren Sie die Staging-Datendatei cities.parquet
in die Tabelle CITIES
.
copy into cities
from (select $1:continent::varchar,
$1:country:name::varchar,
$1:country:city::variant
from @sf_tut_stage/cities.parquet);
Beachten Sie Folgendes:
Der Term
$1
in der SELECT-Abfrage bezieht sich auf die einzelne Spalte, in der die Parquet-Daten gespeichert sind.Die Abfrage wandelt jeden der abgerufenen der Parquet-Elementwerte in bestimmte Spaltentypen um.
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Daten kopiert wurden.
SELECT * from cities;
Die Abfrage gibt das folgende Ergebnis zurück:
+---------------+---------+-----------------+
| CONTINENT | COUNTRY | CITY |
|---------------+---------+-----------------|
| Europe | France | [ |
| | | "Paris", |
| | | "Nice", |
| | | "Marseilles", |
| | | "Cannes" |
| | | ] |
|---------------+---------+-----------------|
| Europe | Greece | [ |
| | | "Athens", |
| | | "Piraeus", |
| | | "Hania", |
| | | "Heraklion", |
| | | "Rethymnon", |
| | | "Fira" |
| | | ] |
|---------------+---------+-----------------|
| North America | Canada | [ |
| | | "Toronto", |
| | | "Vancouver", |
| | | "St. John's", |
| | | "Saint John", |
| | | "Montreal", |
| | | "Halifax", |
| | | "Winnipeg", |
| | | "Calgary", |
| | | "Saskatoon", |
| | | "Ottawa", |
| | | "Yellowknife" |
| | | ] |
+---------------+---------+-----------------+
Schritt 5: Tabelle entladen¶
Entladen Sie die Tabelle CITIES
in eine andere Parquet-Datei.
Bemerkung
Snowflake optimiert Tabellenspalten, indem die kleinste Genauigkeit festgelegt wird, die alle Werte akzeptiert. Wenn Sie ein konsistentes Ausgabedateischema bevorzugen, das durch die Datentypen der „logischen“ Spalte bestimmt wird (d. h. die Typen in der SQL-Entladeabfrage oder in der Quelltabelle), setzen Sie den Sitzungsparameter ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION auf FALSE.
copy into @sf_tut_stage/out/parquet_
from (select continent,
country,
c.value::string as city
from cities,
lateral flatten(input => city) c)
file_format = (type = 'parquet')
header = true;
Beachten Sie Folgendes:
Mit
file_format = (type = 'parquet')
wird „Parquet“ als das Format der Datendatei in dem Stagingbereich festgelegt. (Wenn der Parquet-Dateityp angegeben ist, werden mit dem BefehlCOPY INTO <Speicherort>
die Daten standardmäßig in eine einzelne Spalte entladen.)Die Option
header=true
weist den Befehl an, die Spaltennamen in der Ausgabedatei beizubehalten.Bei einer verschachtelten SELECT-Abfrage:
Mit der Funktion FLATTEN werden zunächst die Elemente des Spaltenarrays
city
in separaten Spalten vereinfacht.Die Ausgabe der FLATTEN-Funktion kann dann mithilfe des LATERAL-Modifikators mit beliebigen Informationen außerhalb des Objekts verknüpft werden – in diesem Beispiel mit
continent
undcountry
.
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Daten in Parquet-Dateien im Stagingbereich kopiert wurden.
select t.$1 from @sf_tut_stage/out/ t;
Die Abfrage gibt die folgenden Ergebnisse zurück (es wird nur ein Teilergebnis angezeigt):
+---------------------------------+
| $1 |
|---------------------------------|
| { |
| "CITY": "Paris", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Nice", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Marseilles", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
+---------------------------------+
Schritt 6: Erfolgreich kopierte Datendateien entfernen¶
Nachdem Sie sich vergewissert haben, dass Sie die Daten erfolgreich aus Ihrem Stagingbereich in die Tabellen kopiert haben, können Sie die Datendateien mit dem Befehl REMOVE aus dem internen Stagingbereich entfernen, um Datenspeicher zu sparen.
REMOVE @sf_tut_stage/cities.parquet;
Schritt 7: Bereinigen¶
Führen Sie die folgenden DROP <Objekt>-Befehle aus, um Ihr System in den Zustand zu versetzen, bevor Sie das Tutorial begonnen haben:
DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
Wenn Sie die Datenbank löschen, werden automatisch alle untergeordneten Datenbankobjekte wie Tabellen entfernt.