0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pg_lake で Snowflake Database のデータを Snowflake Postgres にコピー

0
Posted at

はじめに

Snowflake Postgres の pg_lake では、Database と Postgres の間で Stage を使った双方向のファイル交換ができます。今回利用する Database → Postgres の方向も正式にサポートされています。なお、pg_lake のデータ移動機能は STANDARD または HIGH MEMORY インスタンスが必要で、BURSTABLE はサポートされません。

構成は以下のとおりです。

Snowflake Database のデータを Parquet 形式でステージに出力し、Snowflake Postgres の内部ストレージを経由して PostgreSQL テーブルへロードします。

データ連携の流れは以下のとおりです。

  1. Snowflake Database の ORDERS テーブルを COPY INTO で Parquet ファイルとして Internal Stage に出力
  2. COPY FILES を使用して、Snowflake Postgres から参照可能な Internal Storage にファイルをコピー
  3. pg_lake を利用し、COPY FROM で public.orders テーブルにロード

1. pg_lake の有効化

Snowflake Postgres には GUI 画面が無いため、本検証では Microsoft の VS Code 向けの PostgreSQL 拡張機能を利用します。

セットアップは以下の記事が参考になりました。

接続が完了したら、pg_lake を有効化します。

CREATE EXTENSION pg_lake CASCADE;

SELECT *
FROM pg_extension
WHERE extname = 'pg_lake';

image.png

2. Snowflake Database の ORDERS を Parquet に出力

今回は Snowflake のサンプルデータ SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS を利用します。

まず作業用 Database / Schema / Stage を作成します。

CREATE DATABASE IF NOT EXISTS PG_LAKE_DEMO;

CREATE SCHEMA IF NOT EXISTS PG_LAKE_DEMO.PUBLIC;

CREATE OR REPLACE STAGE
    PG_LAKE_DEMO.PUBLIC.SOURCE_STAGE;

ORDERS を Parquet で出力します。

COPY INTO @SOURCE_STAGE/orders/
FROM (
    SELECT
        *
    FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
)
FILE_FORMAT = (
    TYPE = PARQUET
)
HEADER = TRUE;

image.png

ファイルを確認します。

LIST @SOURCE_STAGE;

image.png

3. Snowflake Postgres 用の Storage Integration を作成

Snowflake SQL 側から Snowflake Postgres の Internal Storage にアクセスするため、Storage Integration を作成します。

CREATE OR REPLACE STORAGE INTEGRATION PG_INTERNAL_STORAGE
    TYPE = POSTGRES_INTERNAL_STORAGE
    POSTGRES_INSTANCE = '<POSTGRES_INSTANCE_NAME>';

続いて Stage を作成します。

CREATE OR REPLACE STAGE PG_LAKE_DEMO.PUBLIC.PG_STAGE
    RELATIVE_URL = '/demo'
    STORAGE_INTEGRATION = PG_INTERNAL_STORAGE;

4. Stage から Snowflake Postgres 側へコピー

先ほど作成した Parquet ファイルを Snowflake Postgres の Internal Storage にコピーします。

COPY FILES
INTO @PG_STAGE/orders/
FROM @SOURCE_STAGE/orders/;

コピーされたことを確認します。

LIST @PG_STAGE/orders/;

image.png

5. Snowflake Postgres でデータをロード

Snowflake Postgres にて、SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS に合わせてテーブルを作成します。

CREATE TABLE public.orders (
    o_orderkey       BIGINT PRIMARY KEY,
    o_custkey        BIGINT,
    o_orderstatus    CHAR(1),
    o_totalprice     NUMERIC(12,2),
    o_orderdate      DATE,
    o_orderpriority  VARCHAR(15),
    o_clerk          VARCHAR(15),
    o_shippriority   INTEGER,
    o_comment        VARCHAR(79)
);

Snowflake Postgres の Internal Storage は @STAGE で参照できるため、以下を実行します。

COPY public.orders
FROM '@STAGE/demo/orders/*.parquet';

データを確認します。

SELECT *
FROM public.orders
LIMIT 10;

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?