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. Cloud Dataflow

    データアナリスト/データエンジニア向けNext19まとめ

    こんにちは、エクスチュア渡部です。2019/4/9-4/11に行わ…

  2. Google BigQuery

    BigQueryのユーザー定義関数(UDF)をTableauで使う

    こんにちは、エクスチュアの渡部です。今回はTableauでstan…

  3. Analytics Hub

    BigQueryでもデータクリーンルームの検証

    こんちには、喜田です。エクスチュアでは顧客のSnowflak…

  4. Google BigQuery

    GoogleNext 2019レポート:3日目

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

  5. Adobe Analytics

    Adobe Analyticsに入り切らないデータをBigQueryに投入する

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

  6. Google Cloud Platform

    【GCP】Cloud Workflowsでデータパイプラインの構築を試してみた①概要編

    こんにちは、エクスチュアの黒岩と申します。エクスチュアブログ…

最近の記事

  1. AIを使ったマーケティングゲームを作ってみた
  2. Snowflakeや最新データ基盤が広義のマーケティングにも…
  3. 回帰分析はかく語りき Part3 ロジスティック回帰
  4. GCSへのSnowflake Open Catalogによる…
  5. VPC Service Controlsで「NO_MATCH…
  1. Mouseflow

    Mouseflowで問題解決② -事例ベースで機能紹介-
  2. IT用語集

    【完全版】Tableau(タブロー)って何?
  3. Tableau

    Tableau Tips〜WINDOW関数〜
  4. Sansan

    Sansanで名刺を取り込んだらSlackで社内共有する(Zapier利用)
  5. Adobe Analytics

    入口とは-Adobe Analyticsの指標説明
PAGE TOP