Create Azure Managed Instance for Apache Cassandra schema on Azure Databricks in Python
前の記事 で、 Azure Databricks から Azure Managed Instance for Apache Cassandra に接続する方法について解説しました。
本記事では、当該 Cassandra クラスターに対して、 Azure Databricks の Notebook 上で Python を使ってスキーマを作成する方法について解説します。スキーマの作成に成功することをゴールとします。
スキーマ情報は Azure Open Datasets で提供されている NOAA Global Forecast System のものを利用します。
前提
- Microsoft Azure に利用可能なサブスクリプションを持っている
- Get Azure Databricks Cluster connected to Azure Managed Instance for Apache Cassandra の手順に沿って Azure Databricks クラスターから Azure Managed Instance for Apache Cassandra クラスターに対して CQL を実行できている
- Import data from Azure Open Datasets in Python の手順に沿って NOAA Global Forecast System のオープンデータが利用できる
免責
- 本記事ではスキーマの作成をゴールとしているため、 PRIMARY KEY の持たせ方等のスキーマの妥当性については無視しています。
手順
- コードは Azure Databricks クラスターの Notebook で実行します。
- 以下、全般的にパラメタを環境変数で定義して利用しています。 Azure Databricks ではクラスターに対して環境変数を設定することができ、その操作はクラスターの管理画面から行います。今回設定した環境変数は以下の通りです。
1 | CASSANDRA_KEYSPACE_REPLICASION_FACTOR=1 |
ライブラリをインポートする
1 | import os |
Azure Managed Instance for Apache Cassandra との間でセッションを張る
1 | contact_points = os.environ['CASSANDRA_CONTACT_POINTS'].split(',') |
CREATE TABLE の CQL クエリを作成する
データを取得しスキーマ情報を得る
1 | from azureml.opendatasets import NoaaGfsWeather |
Keyspace と Table の名前を定義する
1 | keyspace_name = "_".join([os.environ['CASSANDRA_KEYSPACE_NAME'], |
Keyspace を作成する CQL クエリを作成する
1 | query_create_keyspace = "".join([ |
Table を作成する CQL クエリを作成する
1 | query_create_table = "CREATE TABLE IF NOT EXISTS {}.{} (\ |
参考までに、リスト c
の要素と番号との対応関係は以下の通りになります。
1 | c[0]: currentDatetime:timestamp |
CREATE TABLE を実行する
Keyspace の作成を実行する
1 | cassandra_session.execute(query_create_keyspace) |
Table の作成を実行する
1 | cassandra_session.execute(query_create_table) |
それぞれ成功すればOKです。
まとめ
Azure Managed Instance for Apache Cassandra クラスターに対して、 Azure Databricks の Notebook 上で Python を使ってスキーマを作成する方法について解説しました。
今回実行した CQL は文字列で記述したものですが、実際にプロダクトとして実装していく際にはセキュリティと生産性の観点から、O/Rマッパーや Query ビルダーを利用することをお勧めします。 Python の CQL Query ビルダーとしては こちら のようなものがあります。
本記事ではスキーマ作成までしかしておりません。より実践的な使い方については追って記事にしたいと思います。