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;
これらのコマンドは、仮テーブルを作成することに注意してください。仮テーブルは、ユーザーセッションの間のみ保持され、他のユーザーには表示されません。
ステップ1: ファイル形式オブジェクトを作成する¶
CREATE FILE FORMAT コマンドを実行して、 sf_tut_parquet_format
ファイル形式を作成します。
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format
TYPE = parquet;
TYPE = 'parquet'
は、ソースファイル形式の種類を示します。CSV は、デフォルトのファイル形式の種類です。
ステップ2: ステージオブジェクトを作成する¶
CREATE STAGE コマンドを実行して、内部 sf_tut_stage
ステージを作成します。
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
FILE_FORMAT = sf_tut_parquet_format;
仮ステージは、仮テーブルのように、セッションの終了時に自動的にドロップされます。
ステップ3: データファイルをステージングする¶
PUT コマンドを実行して、Parquetファイルをローカルファイルシステムから名前付きステージにアップロードします。
Linuxまたは macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
ステップ4: データをターゲットテーブルにコピーする¶
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
は、Paraquetデータが格納されている単一列を参照します。クエリは、取得した各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" |
| | | ] |
+---------------+---------+-----------------+
ステップ5: テーブルをアンロードする¶
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" |
| } |
+---------------------------------+
ステップ6: 正常にコピーされたデータファイルを削除する¶
ステージからテーブルにデータが正常にコピーされたことを確認した後に、 REMOVE コマンドを使用して内部ステージからデータファイルを削除し、 データストレージ を節約することができます。
REMOVE @sf_tut_stage/cities.parquet;
ステップ7: クリーンアップする¶
次の DROP <オブジェクト> コマンドを実行して、システムをチュートリアルを開始する前の状態に戻します。
DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
データベースをドロップすると、テーブルなどのすべての子データベースオブジェクトが自動的に削除されます。