チュートリアル:Parquetデータのロードとアンロード¶
概要¶
このチュートリアルでは、 COPY INTO <テーブル> コマンドを使用してステージされたParquetファイルの要素をテーブル列に直接変換することで、Parquetデータをアップロードする方法について説明します。このチュートリアルでは、 COPY INTO <場所> コマンドを使用してテーブルデータをParquetファイルにアンロードする方法についても説明します。
前提条件¶
このチュートリアルのために、次を実行する必要があります。
Snowflakeが提供するParquetデータファイルをダウンロードする。
データベース、テーブル、および仮想ウェアハウスを作成する。
データベース、テーブル、および仮想ウェアハウスは、Snowflakeのほとんどのアクティビティに必要となる基本的なSnowflakeオブジェクトです。
サンプルデータファイルのダウンロード¶
サンプルParquetデータファイルをダウンロードするには、 cities.parquet
をクリックします。または、リンクを右クリックし、リンク/ファイルをローカルファイルシステムに保存します。
このチュートリアルでは、次のディレクトリにファイルを解凍したことを前提としています。
Linux/macOS:
/tmp/load
Windows:
C:\tempload
Parquetデータファイルには、サンプルの大陸データが含まれています。以下は代表的な例です。
{ "continent": "Europe", "country": { "city": [ "Paris", "Nice", "Marseilles", "Cannes" ], "name": "France" } }
データベース、テーブル、および仮想ウェアハウスの作成¶
次のコマンドにより、このチュートリアルで使用するためのオブジェクトを作成します。チュートリアルを完了したら、これらのオブジェクトをドロップできます。
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;
これらのコマンドは、仮テーブルを作成することに注意してください。仮テーブルは、ユーザーセッションの間のみ保持され、他のユーザーには表示されません。
ファイル形式オブジェクトを作成する¶
CREATE FILE FORMAT コマンドを実行して、 sf_tut_parquet_format
ファイル形式を作成します。
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format TYPE = parquet;
TYPE = 'parquet'
は、ソースファイル形式の種類を示します。CSV は、デフォルトのファイル形式の種類です。
ステージオブジェクトを作成する¶
CREATE STAGE コマンドを実行して、内部 sf_tut_stage
ステージを作成します。
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage FILE_FORMAT = sf_tut_parquet_format;
仮ステージは、仮テーブルのように、セッションの終了時に自動的にドロップされます。
データファイルをステージングする¶
PUT コマンドを実行して、Parquetファイルをローカルファイルシステムから名前付きステージにアップロードします。
Linuxまたは macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
データをターゲットテーブルにコピーする¶
cities.parquet
ステージングされたデータファイルを CITIES
テーブルにコピーします。
copy into cities from (select $1:continent::varchar, $1:country:name::varchar, $1:country:city::variant from @sf_tut_stage/cities.parquet);
次の点に注意してください。
SELECT クエリの
$1
は、Parquetデータが格納されている単一列を参照します。クエリは、取得した各Parquet要素の値を特定の列の型にキャストします。
次のクエリを実行して、データがコピーされたことを検証します。
SELECT * from cities;
クエリは次の結果を返します。
+---------------+---------+-----------------+ | 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" | | | | ] | +---------------+---------+-----------------+
テーブルをアンロードする¶
CITIES
テーブルを別のParquetファイルにアンロードします。
注釈
デフォルトでSnowflakeは、すべての値を受け入れる最小の精度を設定することにより、アンロードされたParquetデータファイルにあるテーブル列を最適化します。「論理」列のデータ型(つまり、アンロード SQL クエリまたはソーステーブルの型)によって決定される一貫した出力ファイルスキーマを希望する場合は、 ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION セッションパラメーターを 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;
次の点に注意してください。
file_format = (type = 'parquet')
は、ステージ上のデータファイルの形式としてParquetを指定します。Parquetファイル型が指定されている場合は、デフォルトでCOPY INTO <場所>
コマンドにより、データが単一の列にアンロードされます。header=true
オプションは、出力ファイルに列名を保持するようにコマンドに指示します。ネストされた SELECT クエリでは、
FLATTEN 関数は、最初に
city
列の配列要素を個別の列にフラット化します。LATERAL 修飾子は、 FLATTEN 関数の出力をオブジェクト外の情報(この例では
continent
とcountry
)に結合します。
次のクエリを実行して、データがステージされたParquetファイルにコピーされたことを検証します。
select t.$1 from @sf_tut_stage/out/ t;
クエリは次の結果を返します(部分的な結果のみを表示)。
+---------------------------------+ | $1 | |---------------------------------| | { | | "CITY": "Paris", | | "CONTINENT": "Europe", | | "COUNTRY": "France" | | } | |---------------------------------| | { | | "CITY": "Nice", | | "CONTINENT": "Europe", | | "COUNTRY": "France" | | } | |---------------------------------| | { | | "CITY": "Marseilles", | | "CONTINENT": "Europe", | | "COUNTRY": "France" | | } | +---------------------------------+
正常にコピーされたデータファイルを削除する¶
ステージからテーブルにデータが正常にコピーされたことを確認した後に、 REMOVE コマンドを使用して内部ステージからデータファイルを削除し、 データストレージ を節約することができます。
REMOVE @sf_tut_stage/cities.parquet;
クリーンアップする¶
次の DROP <オブジェクト> コマンドを実行して、システムをチュートリアルを開始する前の状態に戻します。
DROP DATABASE IF EXISTS mydatabase; DROP WAREHOUSE IF EXISTS mywarehouse;
データベースをドロップすると、テーブルなどのすべての子データベースオブジェクトが自動的に削除されます。