> ## Documentation Index
> Fetch the complete documentation index at: https://docs.auxia.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Snowflake (GCS Export)

> GCS エクスポートによる Snowflake からのデータ取り込みの設定

<Note>
  日本語版はAIによる翻訳です。正確な情報については[英語版](/data-ingestion/data-connections/snowflake/gcs-export)をご参照ください。
</Note>

このガイドでは、Snowflake のネイティブ `COPY INTO` を使用して、Snowflake から Auxia の GCS バケットにデータをエクスポートして取り込む方法を説明します。

<Note>
  Snowflake を Auxia に連携する際の推奨方法は [Direct Connection](/ja/data-ingestion/data-connections/snowflake/direct-connection) です。読み取り専用ロールを通じて Auxia がテーブルをその場で読み取るため、構築・保守するエクスポートジョブは不要です。ご自身のスケジュールでファイルをプッシュしたい場合は GCS Export をご利用ください。
</Note>

## 1. 概要

このアプローチでは、Snowflake のネイティブ `COPY INTO` コマンドを使用して、Snowflake から Auxia の GCS バケットに直接データをエクスポートします。その後、Auxia がそこからデータを取り込みます。

**フロー:**

```
Client (Snowflake)                         Auxia
      |                                      |
      |                                      | 1. Provide GCS bucket path
      |<-------------------------------------|
      |                                      |
      | 2. Create storage integration        |
      |    (Snowflake generates a GCP        |
      |     service account)                 |
      |                                      |
      | 3. Retrieve & send service account   |
      |------------------------------------->|
      |                                      |
      |                                      | 4. Grant bucket access to
      |                                      |    service account (via IAM)
      |<-------------------------------------|
      |                                      |
      | 5. Set up scheduled exports          |
      |                                      |
      |         Data flows to GCS            |
      |=====================================>|
```

## 2. Auxia から提供されるもの

Auxia は以下を提供します。

* **送信先 GCS バケットパス**（例: `gcs://<your_bucket_path>/`）

取得するには、Auxia のソリューションエンジニアにお問い合わせください。

## 3. 前提条件

* このセットアップを行うユーザーに `ACCOUNTADMIN` ロールが付与されていること（ストレージ統合の作成に必要）。
* コンピュート用の稼働中の Snowflake ウェアハウス。

## 4. Snowflake での SQL の実行

このガイドのすべての SQL コマンドは、Snowflake の Web インターフェース（Snowsight）を使用して実行します。

**SQL ワークシートを開くには:**

1. 左側のナビゲーションメニューで、**Projects** → **Worksheets** を選択します。

   <img src="https://mintcdn.com/auxia/XsfpA_ObWj7oESRX/ja/data-ingestion/data-connections/img/snowflake/image1.png?fit=max&auto=format&n=XsfpA_ObWj7oESRX&q=85&s=b11839ed68ac974de9d3a0f5acca0476" alt="Snowflake left nav — Projects → Worksheets" width="626" height="934" data-path="ja/data-ingestion/data-connections/img/snowflake/image1.png" />

2. 右上の **+** ボタンをクリックします。

   <img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image2.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=ad4d9d2f65a931a5305dbf9c271ac49f" alt="New worksheet button" width="1600" height="618" data-path="ja/data-ingestion/data-connections/img/snowflake/image2.png" />

3. **SQL Worksheet** を選択します。

**SQL コマンドを実行する前に:**

1. ワークシートの右上で **Role** を選択します（ストレージ統合コマンドには `ACCOUNTADMIN` を使用）。

   <img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image3.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=45775babb1e3583a7b632e9bfa24942f" alt="Role selector in worksheet" width="1600" height="614" data-path="ja/data-ingestion/data-connections/img/snowflake/image3.png" />

2. コンピュートリソース用の **Warehouse** を選択します。

3. 必要に応じて **Database** と **Schema** コンテキストを選択します。

**SQL を実行するには:**

* ステートメントにカーソルを置き、**Run** ボタンをクリックします（Mac では `Cmd+Enter`、Windows では `Ctrl+Enter`）。

  <img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image4.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=0d6e04f47e2bba9df473beeca0fbb031" alt="Run button" width="1600" height="614" data-path="ja/data-ingestion/data-connections/img/snowflake/image4.png" />

* すべてのステートメントを実行するには、先にテキスト全体を選択します。

## 5. 必要なアクション

### ステップ 1: ストレージ統合の作成

<Note>
  Google Cloud Console からコピーした GCS バケットパスは `gs://` プレフィックスを使用します。Snowflake では代わりに `gcs://` プレフィックスが必要です。
</Note>

`ACCOUNTADMIN` ロールを選択した状態で、ワークシートで以下の SQL を実行します。

```sql theme={null}
CREATE STORAGE INTEGRATION auxia_gcs_integration
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<your_bucket_path>/');
```

正常に実行されると、以下が表示されます。

<img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image5.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=6f093b21d4589a0c87603115b6936576" alt="Successful storage integration creation" width="1600" height="740" data-path="ja/data-ingestion/data-connections/img/snowflake/image5.png" />

### ステップ 2: サービスアカウントの取得と Auxia への送付

以下の SQL を実行して、Snowflake が生成した GCP サービスアカウントを取得します。

```sql theme={null}
DESC STORAGE INTEGRATION auxia_gcs_integration;
```

`STORAGE_GCP_SERVICE_ACCOUNT` の行を見つけ、その `property_value` をコピーします。

<img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image6.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=bc1b00dffde1b342a05693232f9f53c4" alt="DESC STORAGE INTEGRATION output" width="1600" height="794" data-path="ja/data-ingestion/data-connections/img/snowflake/image6.png" />

コピーした値を Auxia に送付してください。

Auxia は GCP IAM を通じてこのサービスアカウントに送信先バケットへの書き込みアクセスを付与します。

### ステップ 3: スケジュールエクスポートの設定

Auxia が書き込みアクセスの付与を確認したら、以下に指定するフォーマットで GCS バケットにデータを配信するスケジュールエクスポートを設定します。

**コストに関する考慮事項:**

* **ウェアハウスコンピュート:** 各タスク実行時に、ウェアハウスのサイズと実行時間に基づいて Snowflake クレジットが消費されます。課金は秒単位で、実行ごとに最低1分です。
* **データ転送料金:** Snowflake はクロスリージョンまたはクロスクラウドのデータ転送に対してバイト単位の転送料金を請求します。同一リージョン内の転送は無料です。
* **推奨事項:** 適切なサイズのウェアハウス（例: 小規模データセットには X-Small）を使用し、データ量に基づいてエクスポート頻度を検討してください。

**データフォーマット要件:**

#### ファイルフォーマット

* **Parquet**（必須）— エクスポートクエリで `FILE_FORMAT = (TYPE = PARQUET)` を明示的に指定する必要があります。Snowflake は Parquet ファイルにデフォルトで **Snappy** 圧縮を使用します。

#### パーティショニング

データは UTC 日付（`dt=YYYY-MM-DD/`）または UTC 日付と時間（`dt=YYYY-MM-DD/hr=HH/`）でパーティションする必要があります。各フォルダには、その UTC 時間（時間単位のエクスポート）または UTC 日（日単位のエクスポート）に Snowflake に追加されたデータが含まれる必要があります。

**日次パーティショニング:**

```
<your_bucket_path>/
  data/<table_name>/
    dt=2026-01-24/
      data_0_0_0.parquet
    dt=2026-01-25/
      data_0_0_0.parquet
    dt=2026-01-26/
      data_0_0_0.parquet
```

**時間単位パーティショニング:**

```
<your_bucket_path>/
  data/<table_name>/
    dt=2026-01-26/
      hr=00/
        data_0_0_0.parquet
      hr=01/
        data_0_0_0.parquet
      hr=14/
        data_0_0_0.parquet
```

#### データ要件

* エクスポートしたファイルは**イミュータブル**として扱ってください。書き込み後に変更や削除をしないでください。
* すべてのパーティショニングに **UTC タイムスタンプ**を使用してください。

**実現方法:**

エクスポートでは、前回のエクスポート以降に追加された新しいデータをフィルタリングする必要があります。一般的なアプローチは、各行が Snowflake に挿入された日時を記録するタイムスタンプカラム（例: `export_timestamp`）を使用し、そのカラムに基づいてフィルタリングして対応する UTC 期間のデータを抽出することです。正確なフィルタリングロジックは、データ構造とパイプラインによって異なります。

以下は、参考となる Snowflake Task の例です。スケジュール、フィルタリングロジック、エクスポートパスは例示です。データパイプラインに合わせて変更してください。

#### サンプル: 時間単位エクスポート

```sql theme={null}
-- Set database context
USE DATABASE <your_database>;
USE SCHEMA <your_schema>;

CREATE OR REPLACE TASK hourly_export_task
  WAREHOUSE = <your_warehouse>
  SCHEDULE = 'USING CRON 5 * * * * UTC'  -- Example: runs once per hour, at HH:05 UTC
AS
DECLARE
  export_ts TIMESTAMP_NTZ := DATEADD(hour, -1, CONVERT_TIMEZONE('UTC', CURRENT_TIMESTAMP()));
  export_date VARCHAR := TO_CHAR(export_ts, 'YYYY-MM-DD');
  export_hour VARCHAR := TO_CHAR(export_ts, 'HH24');
BEGIN
  EXECUTE IMMEDIATE '
    COPY INTO ''gcs://<your_bucket_path>/data/<table_name>/dt=' || export_date || '/hr=' || export_hour || '/''
    FROM (
      SELECT *
      FROM <your_database>.<your_schema>.<table_name>
      -- Convert export_timestamp to UTC (replace <source_timezone> with your timezone, e.g., America/Los_Angeles)
      WHERE DATE(CONVERT_TIMEZONE(''<source_timezone>'', ''UTC'', export_timestamp)) = ''' || export_date || '''::DATE
        AND HOUR(CONVERT_TIMEZONE(''<source_timezone>'', ''UTC'', export_timestamp)) = ' || export_hour || '
    )
    STORAGE_INTEGRATION = auxia_gcs_integration
    FILE_FORMAT = (TYPE = PARQUET)
    HEADER = TRUE
  ';
END;
```

タスクが作成されたら、実行を開始するためにタスクを再開します。

```sql theme={null}
ALTER TASK hourly_export_task RESUME;
```

#### サンプル: 日次エクスポート

```sql theme={null}
-- Set database context
USE DATABASE <your_database>;
USE SCHEMA <your_schema>;

CREATE OR REPLACE TASK daily_export_task
  WAREHOUSE = <your_warehouse>
  SCHEDULE = 'USING CRON 30 0 * * * UTC'  -- Example: runs once per day, at 00:30 UTC
AS
DECLARE
  export_date VARCHAR := TO_CHAR(DATEADD(day, -1, CURRENT_DATE()), 'YYYY-MM-DD');
BEGIN
  EXECUTE IMMEDIATE '
    COPY INTO ''gcs://<your_bucket_path>/data/<table_name>/dt=' || export_date || '/''
    FROM (
      SELECT *
      FROM <your_database>.<your_schema>.<table_name>
      -- Convert export_timestamp to UTC (replace <source_timezone> with your timezone, e.g., America/Los_Angeles)
      WHERE DATE(CONVERT_TIMEZONE(''<source_timezone>'', ''UTC'', export_timestamp)) = ''' || export_date || '''::DATE
    )
    STORAGE_INTEGRATION = auxia_gcs_integration
    FILE_FORMAT = (TYPE = PARQUET)
    HEADER = TRUE
  ';
END;
```

タスクが作成されたら、実行を開始するためにタスクを再開します。

```sql theme={null}
ALTER TASK daily_export_task RESUME;
```

タスクが正常に作成されると、以下が表示されます。

<img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image7.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=6ee8a5bde3b6f06838a8ae2478b18252" alt="Successful task creation" width="1600" height="911" data-path="ja/data-ingestion/data-connections/img/snowflake/image7.png" />

<img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image8.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=406644aa490fe333782b3557a4e1ab80" alt="Task creation confirmation" width="1600" height="679" data-path="ja/data-ingestion/data-connections/img/snowflake/image8.png" />

## 6. タスク実行の監視

エクスポートタスクが正しく実行されていることを確認するには、以下の SQL コマンドを使用します。

**すべてのタスクを一覧表示:**

```sql theme={null}
SHOW TASKS;
```

先ほど作成したタスクが結果に表示されます。

<img src="https://mintcdn.com/auxia/SSSmkG8B2fcez8GX/ja/data-ingestion/data-connections/img/snowflake/image9.png?fit=max&auto=format&n=SSSmkG8B2fcez8GX&q=85&s=ad65a5462c140f232203e812157df8e4" alt="SHOW TASKS output" width="1600" height="679" data-path="ja/data-ingestion/data-connections/img/snowflake/image9.png" />

**最近のタスク実行履歴を表示:**

```sql theme={null}
SELECT
    NAME,
    STATE,
    SCHEDULED_TIME,
    COMPLETED_TIME,
    ERROR_MESSAGE
FROM TABLE(<your_database>.INFORMATION_SCHEMA.TASK_HISTORY())
WHERE NAME = 'HOURLY_EXPORT_TASK'
ORDER BY SCHEDULED_TIME DESC
LIMIT 10;
```

タスクが正常に実行されると、`STATE` カラムに `SUCCEEDED` と表示されます。

<img src="https://mintcdn.com/auxia/XsfpA_ObWj7oESRX/ja/data-ingestion/data-connections/img/snowflake/image10.png?fit=max&auto=format&n=XsfpA_ObWj7oESRX&q=85&s=38f9e98144f166a07558599d9688a6a1" alt="Task history with SUCCEEDED state" width="1600" height="574" data-path="ja/data-ingestion/data-connections/img/snowflake/image10.png" />

**タスクの一時停止または再開:**

```sql theme={null}
-- Suspend
ALTER TASK hourly_export_task SUSPEND;

-- Resume
ALTER TASK hourly_export_task RESUME;
```

## 7. Auxia への確認

エクスポートタスクが実行され確認できたら、Auxia に通知し、以下を確認してください。

* **エクスポート頻度**（時間単位または日次）
* **エクスポートするテーブル**

## 8. 推奨プラクティス

* **Parquet フォーマットを使用** — Snowflake はデフォルトで **Snappy** 圧縮を使用して Parquet ファイルを圧縮します。
* **UTC 日付でパーティション**（日次）または **UTC 日付/時間**（時間単位）でパーティション
* **イミュータビリティの確保** — ファイルが書き込まれたら、変更や削除をしないでください。
* **UTC タイムスタンプを使用** — すべてのパーティショニングは UTC 時間に基づく必要があります。
* **タスク実行の監視** — タスク履歴を定期的にチェックして、失敗や遅延がないか確認してください。

## 9. まとめ

| ステップ | アクション                          | 担当    |
| :--- | :----------------------------- | :---- |
| 1    | GCS バケットパスの提供                  | Auxia |
| 2    | ストレージ統合の作成                     | お客様   |
| 3    | サービスアカウントの取得と Auxia への送付       | お客様   |
| 4    | サービスアカウントへのバケットアクセスの付与（IAM 経由） | Auxia |
| 5    | スケジュールエクスポートタスクの設定             | お客様   |
| 6    | エクスポートの実行確認                    | お客様   |

## サポートが必要ですか?

[**support@auxia.io**](mailto:support@auxia.io) または Auxia のソリューションエンジニアまでお問い合わせください。
