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

    VPC Service Controlsで「NO_MATCHING_ACCESS_LEVEL」とエラ…

    こんにちは!はじめに今回、セキュリティ強化の…

  2. Adobe Analytics

    Adobe Analytics: DatafeedをGoogle BigQueryにロード(2019…

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

  3. Google Cloud Platform

    Vertex AI Embeddings for Text によるテキストエンベディングをやってみた…

    こんにちは、石原と申します。自然言語処理(NLP)は近年のA…

  4. Google Cloud Platform

    LookerStudioを知る。

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

  5. Firebase Analytics

    Firebase AnalyticsのデータをフラットなCSVに変換するETL処理

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

  6. Enterprise Data Warehouse

    爆速データウェアハウスなApache Druidを試す

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

カテゴリ

最近の記事

  1. #ai-datacloud勉強会でマルチモーダルに触れた日
  2. Matillion ETLを安全に使いたい人へ送る、SSL対…
  3. LangGraphのソースコードから見る今更聞けないAIエー…
  4. Canva×生成AIで“映える”ダッシュボー…
  5. ベイズとかいうすごいやつ
  1. IT用語集

    クロスデバイス(Cross Device)って何?
  2. 未分類

    1st Party Cookieと3rd Party Cookieの違いと昨今の…
  3. IT用語集

    サブルーチン(Sub Routine)・メインルーチン(Main Routine…
  4. Amazon Web Services

    System Managerを利用したVPC内Redshiftへの接続
  5. Generative AI

    LangGraphのソースコードから見る今更聞けないAIエージェント実装(cre…
PAGE TOP