Google Cloud Platform

GCSへのSnowflake Open Catalogによるデータレイクハウス導入チュートリアル

はじめに

こんにちは、エクスチュアの石原です。

今回は10月18日にSnowflakeよりGAが発表されたSnowflake Open Catalogのチュートリアルを実施してみました。チュートリアルではAWS環境をベースに構築していましたので、本記事ではGCP環境上にSnowflake Open Catalogを構築してみました。

構築で手間取った部分などご紹介できればと思います。

GCS上でのデータレイクハウス導入手順

Getting started with Snowflake Open Catalog

AWS版のチュートリアルと同様に進んで変更した点をご紹介します。

自分の環境ではminiconda3をインストールしました。また、下記の内容はスキップしています

  • Create an IAM policy that grants access to your S3 location
  • Create an IAM role

Create an internal catalog in Open Catalog

Storage providerをGCSに変更、Default base locationにGCS上のバケットを入力します。

例:gs://sample_bucket/snowflake_open_catalog(snowflake_open_catalogフォルダ内にデータが格納されます)

Create a trust relationship

GCSの場合はGCP_SERVICE_ACCOUNT情報を保存します。

保存したサービスアカウントへ該当するGCSへの書き込みと読み込みを含むアクセス権限を付与します。

Configure Spark

os.environ['SPARK_HOME'] = '/Users/xxxxx/miniconda3/envs/iceberg-lab/Lib/site-packages/pyspark' # condaでインストールしたpyspark環境の場所を指定してください

自分の環境ではJAVA_HOMEHADOOP_HOMEも環境変数として必要になったので保存しています。以下でパスが確認できるか試してみてください。必要であれば別途インストールしてください。

print(os.environ['JAVA_HOME']) # /Users/xxxxx/java
print(os.environ['HADOOP_HOME']) # /Users/xxxxx/hadoop/hadoop-3.0.0

spark.jars.packagesをGCPのパッケージに変更し、<open_catalog_account_identifier><client_id>:<client_secret><catalog_name><principal_role_name>の値をそれぞれ変更します。

<open_catalog_account_identifier>はログインした際のURLの英数字を設定します。

<client_id>:<client_secret>はCreate a new connection for Apache Spark™セクションで確認したシークレットに入力してください。

<catalog_name>はCreate an internal catalog in Open Catalogセクションで作成したカタログ名を入力します。

<principal_role_name>にはSet up catalog privileges for connectionセクションで作成したロール名を入力します。

注意点

10/30現在ではdefaultCatalogの設定を旧名称のpolarisに設定しなければいけなかったので注意

spark = SparkSession.builder.appName('iceberg_lab') \
.config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,org.apache.iceberg:iceberg-gcp-bundle:1.5.2') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.config('spark.sql.defaultCatalog', 'polaris') \
.config('spark.sql.catalog.polaris', 'org.apache.iceberg.spark.SparkCatalog') \
.config('spark.sql.catalog.polaris.type', 'rest') \
.config('spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation','vended-credentials') \
.config('spark.sql.catalog.polaris.uri','https://<open_catalog_account_identifier>.snowflakecomputing.com/polaris/api/catalog') \
.config('spark.sql.catalog.polaris.credential','<client_id>:<client_secret>') \
.config('spark.sql.catalog.polaris.warehouse','<catalog_name>') \
.config('spark.sql.catalog.polaris.scope','PRINCIPAL_ROLE:<principal_role_name>') \
.getOrCreate()

その後のチュートリアルは変更なしでも行けるはずです。

ただし、Snowflakeが動作している環境がGCPではない場合、同期テーブルの設定時にThe external volume and warehouse must be in the same location for tables using the Snowflake catalog.エラーが発生してしまうので注意してください。その場合、同期の設定に関してはホストしているクラウドと同一リージョンのストレージを利用してください。

今回の記事は以上となります。同じポイントで困っていた人の助けになれば幸いです。

エクスチュアはマーケティングテクノロジーを実践的に利用することで企業のマーケティング活動を支援しています。
ツールの活用にお困りの方はお気軽にお問い合わせください。

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Google Cloud Platform

    LookerStudioを知る。

    LookerStudioを知る。 -エクスチュアのツール紹介-Goog…

  2. Application Integration

    Google Cloud iPaaS 「Application Integration」を使ってみた…

    こんにちは、エクスチュアの黒岩です。今回の記事では、Goog…

  3. Google BigQuery

    Tableau×BigQueryをコスパ良く使う方法

    こんにちは、エクスチュア渡部です。TableauでBigQue…

  4. Google BigQuery

    【BigQuery】TABLESAMPLE SYSTEMを日本一詳しく解説する

    1. はじめにこんにちは、エクスチュアの大崎です。…

  5. Google BigQuery

    GCP: 今月のGCP課金額をslackに自動的に書き込む

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  6. Adobe Analytics

    Adobe Analytics: データフィードをGoogle Compute EngineのLin…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

最近の記事

  1. GCSへのSnowflake Open Catalogによる…
  2. VPC Service Controlsで「NO_MATCH…
  3. モダンデータスタックなワークフローオーケストレーションツール…
  4. Streamlit in Snowflakeによるダッシュボ…
  5. Streamlit in SnowflakeによるStrea…
  1. IT用語集

    ユビキタス(Ubiquitous)って何?
  2. Python

    その分析、やり方あってる?記述統計と推測統計の違い
  3. Tableau

    Tableauの便利な機能
  4. ObservePoint

    Webサイトのプライバシー検証 (6/6): 知らない国やドメインにデータを送っ…
  5. ブログ

    「Power BI」を用いたダッシュボードの作成!②
PAGE TOP