はい、こんにちわー。

この記事は Databricks Advent Calendar 2024 6日目(Part2)の記事です!

何書こうか悩んだんですが、、、決めました!

「第一回 推し地味アップデート選手権!」をやろうと思います(勝手に)

選手入場!!!!

とりあえず1個ずつ自己紹介と推しポイント言ってもらうよ!

サービスクレデンシャルをUnity Catalogに保存してクラウドリソースにアクセス!

「わしゃあ、Notebookにクレデンシャル書くのはいやなんじゃ!」

いや、それはSecret使ってねって感じなんですが、この前出た機能で、Unity Catalogに外部クラウドアクセス用のサービスクレデンシャルを保存して外部リソースへのアクセスが可能になる、という機能がでました

「External Data」ここからいきましょう

「Credentials」タブを見ると増えてるんですよ「SERVICE」というのが、、、これです!「Create credential」で作りましょう!

必要な権限を付けたIAM RoleのARNを入れてGo!です!

こんな感じで作って見たら後はコードからこんな感じで使用すればOK

import boto3

boto3_session = boto3.Session(botocore_session=dbutils.credentials.getServiceCredentialsProvider('aws_test_credential'), region_name='us-east-1')
sm = boto3_session.client('secretsmanager')

Unity Catalogでクラウド接続管理ができて便利です!

SQLの出力に _sqldf が使えるように!

「SQLの結果をPythonでも読みたいんじゃ、、、行ったり来たりしたいんじゃ!」

できらあっ!!!

最近のNotebookでSQLの出力結果が_sqldfというデータフレームで出力されるようになりました。これは特別なデータフレームでその後続処理で引き継いで使用することができます!

例えばこんなデータがあるとします

下をよく見ると、、、?

と書いてありますね、これが_sqldfです。この後のセルでこう書いてみましょう

カラムを一個追加して新しいテーブルに書き出してみました

その通りカラムが追加されています、こんな感じでSQLの実行結果をシームレスにPythonにわたすことができるので地味便利!!!

WorkflowのForeachタスクタイプ!

「前のタスクで出た結果を次のタスクに渡したいじゃあ!!!でも配列ごとに結果を出したいんだけどいっぱいタスク作るのは嫌じゃあ!!!」

もうタダの悩み相談ですね、あります!WorkflowにForeachタイプがでました!

これの良い所は単純に配列やディクショナリを渡してもいいですが、前の処理の結果を渡すことができることでスーパーエキサイテッド!

ランダムに辞書を作成するNotebookを作ってこのコードを書いておきます

import random
import string

# パラメータ定義
parameters = []

# ランダムな文字列を100個生成して parameters 配列に append する
for _ in range(10):
    random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
    obj = {"task_parameter": random_string}
    parameters.append(obj)

# dbutilsでタスクバリューを設定
dbutils.jobs.taskValues.set(key = "task_parameters", value = parameters)

print(f"parameters: {parameters}")

こんな結果が出ると思います

parameters: [{'task_parameter': 'uS5u2DhQbp'}, {'task_parameter': '13d6u8FQha'}, {'task_parameter': '1hgOleCE1K'}, {'task_parameter': 'ntjKQXH7DF'}, {'task_parameter': 'VNWgu9A6xq'}, {'task_parameter': 'O7Xh9z1LfH'}, {'task_parameter': 'LsPOuDDEsE'}, {'task_parameter': 'BNCyuQ8CEW'}, {'task_parameter': 'at3U2ubXXe'}, {'task_parameter': '
以下略

次にそれを受けるNotebookを書きます

# パラメータの取得
task_parameter = dbutils.widgets.get("task_parameter")

# パラメータの出力
print("task_parameter:" + task_parameter)

これでNotebookはOKです!

次にこんなWorkflowを作りましょう!大事なのは

ここのinput にある{{tasks.generate_param.values.task_parameters}} で、これは先ほどのgenerate_paramのタスクから生成されたパラメータを受けるための設定です!

こちらで大事なのは、その受けたパラメーターを各Foreachタスクに伝えるためのタスクパラメータです。

ここですね。

ここまできたら、しましょう!実行!

こんな感じで中でイテレートされた形で分散して実行されます!

実際には、テーブルの対象一覧取ってきて、それに対して並列実行したりとかができると便利な気がします!

以上です!

「第一回 推し地味アップデート選手権!」いかがでしたでしょうか?

地味だけど良い機能たちでしたでしょう?

まだ使ってないあなた!是非使ってみてくださいね!

コメントを残す

Trending