Databricks API、SQLコネクタ、CLIによるBright Dataデータセットのクエリ

REST API、CLI、SQLコネクタを使用してDatabricks内でBright Dataのデータセットを簡単にクエリする方法をご紹介します。ステップバイステップの設定手順とコード付き!
4 分読
Querying Bright Data Datasets via Databricks API

この記事では、以下の内容をご紹介します:

  • Bright DataがDatabricks上で提供する製品
  • – Databricksアカウントの設定方法と、プログラムによるデータ取得・探索に必要な全認証情報の取得方法
  • Databricksのを使用してBright Dataデータセットをクエリする方法
    • REST API
    • CLI
    • SQLコネクタ

さあ、始めましょう!

Databricks上のBright Dataのデータ製品

Databricksは、エンタープライズグレードのデータ、アナリティクス、AIソリューションを大規模に構築、デプロイ、共有、維持するためのオープンなアナリティクスプラットフォームです。ウェブサイトでは複数のプロバイダーのデータ製品を見つけることができ、これが最高のデータマーケットプレイスの1つと見なされる理由です。

Bright Dataは最近、データ製品プロバイダーとしてDatabricksに参画し、すでに40以上の製品を提供しています:

これらのソリューションには、B2Bデータセット、企業データセット、金融データセット不動産データセットなどが含まれます。さらに、スクレイピングブラウザや Web Scraper APIなど、Bright Dataのインフラを通じて、より一般的なウェブデータ取得やウェブスクレイピングソリューションにもアクセスできます。

このチュートリアルでは、Databricks API、CLI、専用SQLコネクタライブラリを使用して、これらのBright Dataデータセットのいずれかからプログラム的にデータをクエリする方法を学びます。さっそく始めましょう!

Databricks の開始

APIまたはCLI経由でDatabricksからBright Dataデータセットをクエリするには、まずいくつかの設定が必要です。以下の手順に従ってDatabricksアカウントを設定し、Bright Dataデータセットへのアクセスと統合に必要なすべての認証情報を取得してください。

このセクションの終わりまでに、以下の準備が整います:

  • 設定済みのDatabricksアカウント
  • Databricksアクセストークン
  • Databricks ウェアハウス ID
  • Databricksホスト文字列
  • Databricksアカウント内の1つ以上のBright Dataデータセットへのアクセス権

前提条件

まず、Databricksアカウント(無料アカウントで十分です)をお持ちであることを確認してください。お持ちでない場合はアカウントを作成してください。お持ちの場合は、ログインしてください

Databricksアクセストークンの設定

Databricksリソースへのアクセスを許可するには、アクセストークンが必要です。以下の手順に従って設定してください。

Databricksダッシュボードでプロフィール画像をクリックし、「設定」オプションを選択します:

Selecting the “Settings” option

「設定」ページで「開発者」オプションを選択し、「アクセストークン」セクションの「管理」ボタンをクリックします:

Clicking the “Manage” button in the “Access tokens” section

「アクセストークン」ページで「新しいトークンを生成」をクリックし、モーダル内の指示に従ってください:

Pressing the “Generate new token” button

Databricks API アクセストークンが発行されます。すぐに必要となるため、安全な場所に保管してください。

Databricks ウェアハウス ID の取得

APIをプログラムで呼び出したり、CLI経由でデータセットをクエリしたりするには、DatabricksのウェアハウスIDも必要です。取得するには、メニューから「SQL Warehouses」オプションを選択します:

Selecting the “SQL Warehouses” option

利用可能なウェアハウス(この例では「Serverless Starter Warehouse」)をクリックし、「概要」タブに移動します:

The “Overview” tab of your selected Databricks warehouse

「Name」セクションに、Databricks ウェアハウス ID が表示されます(括弧内の「ID:」の後にあります)。これをコピーして安全な場所に保管してください。すぐに必要になります。

Databricksホストの特定

Databricksのコンピューティングリソースに接続するには、Databricksのホスト名を指定する必要があります。これはDatabricksアカウントに関連付けられたベースURLに対応し、以下のような形式です:

https://<ランダム文字列>.cloud.databricks.com

この情報は、DatabricksダッシュボードのURLから直接コピーして確認できます:

Bright Dataデータセットへのアクセス権取得

API、CLI、またはSQLコネクタ経由でクエリを実行できるように、Databricksアカウントに1つ以上のBright Dataデータセットを追加する必要があります。

「マーケットプレイス」ページに移動し、左側の設定ボタンをクリックして、関心のあるプロバイダーとして「Bright Data」のみを選択します:

Selecting the “Bright Data” provider

これにより、利用可能なデータ製品がBright Data提供かつDatabricks経由でアクセス可能なものに絞り込まれます。

この例では、「Zillow Properties Information Dataセット」に興味があると仮定します:

The Bright Data “Zillow Properties Information Dataset” product on Databricks

データセットカードをクリックし、「Zillow Properties Information Dataset」ページで「Get Instances Access」を押してDatabricksアカウントに追加します:

Pressing the “Get instant access” button

データセットがアカウントに追加され、Databricks SQL経由でクエリを実行できるようになります。このデータの出典が気になる場合、答えはBright DataのZillowデータセットです

「SQLエディター」ページに移動し、次のようなSQLクエリでデータセットをクエリして確認してください:

SELECT * FROM bright_data_zillow_properties_information_dataset.データセット.zillow_properties
WHERE state LIKE 'NY' AND homestatus LIKE 'FOR_SALE' 
LIMIT 10;

結果は以下のようなものになるはずです:

The result produced by the SQL query

素晴らしい!選択したBright Dataデータセットの追加と、Databricks経由でのクエリ実行に成功しました。他のBright Dataデータセットも同様の手順で追加できます。

次のセクションでは、このデータセットのクエリ方法を学びます:

  • Databricks REST API経由
  • Python用Databricks SQLコネクタを使用
  • Databricks CLI 経由

Databricks REST API 経由での Bright Data データセットのクエリ方法

Databricksは、アカウント内で利用可能なデータセットのクエリ機能を含む、一部の機能をREST API経由で公開しています。Bright Dataが提供する「Zillow Properties Information Dataset」をプログラムでクエリする方法を、以下の手順で確認してください。

:以下のコードはPythonで記述されていますが、他のプログラミング言語に簡単に適応したり、cURLを介してBashで直接呼び出したりできます。

ステップ #1: 必要なライブラリのインストール

リモートDatabricksウェアハウスでSQLクエリを実行するには、REST APIエンドポイント/api/2.0/sql/statements を使用します。任意のHTTPクライアントからPOSTリクエストで呼び出せます。本例ではPythonのRequestsライブラリを使用します。

インストール方法:

pip install requests

次に、スクリプト内でインポートします:

import requests

詳細については、Python Requestsに関する専用ガイドをご覧ください。

ステップ #2: Databricks 認証情報とシークレットの準備

HTTPクライアントを使用してDatabricks REST APIエンドポイント/api/2.0/sql/statementsを呼び出すには、以下を指定する必要があります:

  • Databricks アクセストークン: 認証用。
  • Databricksホスト: 完全なAPI URLを構築するため。
  • Databricks ウェアハウス ID: 正しいウェアハウス内の正しいテーブルをクエリするため。

以前に取得したシークレットをスクリプトに次のように追加します:

databricks_access_token = "<YOUR_DATABRICKS_ACCESS_TOKEN>"
databricks_warehouse_id = "<YOUR_DATABRICKS_WAREHOUSE_ID>"
databricks_host = "<YOUR_DATABRICKS_HOST>"

ヒント: 本番環境では、これらのシークレットをスクリプトにハードコーディングしないでください。代わりに、セキュリティ強化のため、これらの認証情報を環境変数に保存し、python-dotenvを使用して読み込むことを検討してください。

ステップ #3: SQL文実行APIを呼び出す

Requests を使用して、適切なヘッダーとボディを伴い、/api/2.0/sql/statementsエンドポイントにPOST HTTP リクエストを送信します:

# 指定されたデータセットで実行するパラメータ付きSQLクエリ
sql_query = """
SELECT *
FROM bright_data_zillow_properties_information_dataset.data sets.zillow_properties
WHERE state LIKE :state AND homestatus LIKE :homestatus
LIMIT :row_limit;
"""
# SQLクエリに設定するパラメータ
parameters = [
    {"name": "state", "value": "NY", "type": "STRING"},
    {"name": "homestatus", "value": "FOR_SALE", "type": "STRING"},
    {"name": "row_limit", "value": "10", "type": "INT"}
]

# POSTリクエストを送信し、データセットをクエリする
headers = {
    "Authorization": f"Bearer {databricks_access_token}", # Databricks認証用
    "Content-Type": "application/json"
}

payload = {
    "statement": sql_query,
    "warehouse_id": databricks_warehouse_id,
    "parameters": parameters
}

response = requests.post(
    f"{databricks_host}/api/2.0/sql/statements",
    headers=headers,
    data=json.dumps(payload)
)

ご覧の通り、上記のスニペットは事前準備されたSQLステートメントに依存しています。ドキュメントで強調されている通り、DatabricksはSQLステートメントのベストプラクティスとしてパラメータ化されたクエリの使用を強く推奨しています。

言い換えれば、上記スクリプトの実行は、先程と同様にbright_data_zillow_properties_information_dataset.data sets.zillow_propertiesテーブルに対して以下のクエリを実行することに相当します:

SELECT * FROM bright_data_zillow_properties_information_dataset.データセット.zillow_properties
WHERE state LIKE 'NY' AND homestatus LIKE 'FOR_SALE' 
LIMIT 10;

素晴らしい!あとは出力データの管理のみです

ステップ #4: クエリ結果のエクスポート

以下のPythonロジックでレスポンスを処理し、取得したデータをエクスポートします:

if response.status_code == 200:
    # 出力 JSON データにアクセス
    result = response.json()

    # 取得したデータを JSON ファイルにエクスポート
    output_file = "zillow_properties.json"
    with open(output_file, "w", encoding="utf-8") as f:
        json.dump(result, f, indent=4)
    print(f"クエリ成功!結果を '{output_file}' に保存しました")
else:
    print(f"エラー {response.status_code}: {response.text}")

リクエストが成功した場合、このスニペットはクエリ結果を含むzillow_properties.jsonファイルを作成します。

ステップ #5: 全てを統合する

最終的なスクリプトには以下を含める必要があります:

import requests
import json

# Databricksの認証情報(適切な値に置き換えてください)
databricks_access_token = "<YOUR_DATABRICKS_ACCESS_TOKEN>"
databricks_warehouse_id = "<YOUR_DATABRICKS_WAREHOUSE_ID>"
databricks_host = "<YOUR_DATABRICKS_HOST>"

# 指定されたデータセットで実行するパラメータ付きSQLクエリ
sql_query = """
SELECT *
FROM bright_data_zillow_properties_information_dataset.data sets.zillow_properties
WHERE state LIKE :state AND homestatus LIKE :homestatus
LIMIT :row_limit;
"""
# SQLクエリに代入するパラメータ
parameters = [
    {"name": "state", "value": "NY", "type": "STRING"},
    {"name": "homestatus", "value": "FOR_SALE", "type": "STRING"},
    {"name": "row_limit", "value": "10", "type": "INT"}
]

# POSTリクエストを送信し、データセットをクエリする
headers = {
    "Authorization": f"Bearer {databricks_access_token}", # Databricks認証用
    "Content-Type": "application/json"
}

payload = {
    "statement": sql_query,
    "warehouse_id": databricks_warehouse_id,
    "parameters": parameters
}

response = requests.post(
    f"{databricks_host}/api/2.0/sql/statements",
    headers=headers,
    data=json.dumps(payload)
)

# レスポンスの処理
if response.status_code == 200:
    # 出力されたJSONデータへのアクセス
    result = response.json()

    # 取得したデータをJSONファイルにエクスポート
    output_file = "zillow_properties.json"
    with open(output_file, "w", encoding="utf-8") as f:
        json.dump(result, f, indent=4)
    print(f"クエリ成功!結果を '{output_file}' に保存しました")
else:
    print(f"エラー {response.status_code}: {response.text}")

実行すると、プロジェクトディレクトリにzillow_properties.jsonファイルが生成されます。

出力の最初には利用可能なカラムを理解するためのカラム構造が含まれます。その後、data_arrayフィールドにクエリ結果のデータがJSON文字列として表示されます:

A portion of the data_array field

ミッション完了!Bright Dataが提供するZillow物件データをDatabricks REST API経由で取得しました。

Databricks CLIを使用したBright Dataデータセットへのアクセス方法

Databricksでは、Databricks CLIを通じてデータウェアハウス内のデータをクエリすることも可能です。これは内部でREST APIを利用しています。その使用方法を学びましょう!

ステップ #1: Databricks CLI のインストール

Databricks CLIは、ターミナルから直接Databricksプラットフォームとやり取りできるオープンソースのコマンドラインツールです。

インストールするには、お使いのオペレーティングシステムに対応したインストールガイドに従ってください。正しく設定されていれば、`databricks -v` コマンドを実行すると以下のような出力が表示されます:

The output of the “databricks -v” command

完璧です!

ステップ #2: 認証用の設定プロファイルを定義する

Databricks CLIを使用して、Databricks個人アクセストークンで認証する「DEFAULT」という名前の設定プロファイルを作成します。以下のコマンドを実行してください:

databricks configure --profile DEFAULT

次に、以下の情報を入力するよう求められます:

  1. Databricksホスト
  2. Databricksアクセストークン

両方の値を貼り付けてEnterキーを押すと設定が完了します:

Setting up your Databricks configuration profile

これで、--profile DEFAULTオプションを指定することでCLIAPIコマンドの認証が可能になります。

ステップ #3: データセットのクエリ

以下の CLI コマンドを使用して、API postコマンド経由でパラメータ化されたクエリを実行します:

databricks API post "/api/2.0/sql/statements" 
--profile DEFAULT 
--json '{
  "warehouse_id": "<YOUR_DATABRICKS_WAREHOUSE_ID>",
  "statement": "SELECT * FROM bright_data_zillow_properties_information_dataセット.データセット.zillow_properties WHERE state LIKE :state AND homestatus LIKE :homestatus LIMIT :row_limit",
  "parameters": [
    { "name": "state", "value": "NY", "type": "STRING" },
    { "name": "homestatus", "value": "FOR_SALE", "type": "STRING" },
    { "name": "row_limit", "value": "10", "type": "INT" }
  ]
}' 
> zillow_properties.json

<YOUR_DATABRICKS_WAREHOUSE_ID>プレースホルダーを、実際の Databricks SQL ウェアハウスの ID に置き換えてください。

内部的には、これは以前Pythonで行った操作と同じことを行います。具体的には、Databricks REST SQL APIへのPOSTリクエストを発行します。結果は、以前と同じデータを含むzillow_properties.jsonファイルとなります:

The output  zillow_properties.json file

Databricks SQLコネクタを介したBright Dataからのデータセットクエリ方法

Databricks SQLコネクタは、DatabricksクラスターおよびSQLウェアハウスに接続するためのPythonライブラリです。特に、Databricksインフラストラクチャへの接続とデータ探索のための簡素化されたAPIを提供します。

このガイドセクションでは、Bright Dataの「Zillow物件情報データセット」をクエリするためにこのコネクタを使用する方法を学びます。

ステップ #1: Python 用 Databricks SQL コネクタのインストール

Databricks SQL Connector は、databricks-sql-connectorPython ライブラリを通じて利用可能です。以下のコマンドでインストールします:

pip install databricks-sql-connector

次に、スクリプト内でインポートします:

from databricks import sql

ステップ #2: Databricks SQL Connector の使用を開始する

Databricks SQL Connector は、REST API や CLI とは異なる認証情報を必要とします。具体的には以下の情報が必要です:

  • server_hostname: Databricksのホスト名(https://部分は除く)
  • http_path: データウェアハウスに接続するための特別なURL。
  • access_token: Databricksのアクセストークン。

必要な認証値とサンプルスタータースニペットは、SQL ウェアハウスの「接続詳細」タブで確認できます:

Clicking the Python button on the “Connection Details” of your warehouse

「Python」ボタンを押すと、以下の情報が表示されます:

The databricks-sql-connector sample snippet

以上がdatabricks-sql-connectorの使用開始に必要な手順です。

ステップ #3: すべてを統合する

「Python用Databricks SQLコネクタ」セクションのサンプルスニペットのコードを、対象のパラメータ化クエリを実行できるよう、ご自身のウェアハウスに合わせて調整してください。最終的には以下のようなスクリプトになるはずです:

from databricks import sql

# Databricks内のSQLウェアハウスに接続(認証情報は自身の値に置き換えてください)
connection = sql.connect(
    server_hostname = "<YOUR_DATABRICKS_HOST>",
    http_path = "<YOUR_DATABRICKS_WAREHOUSE_HTTP_PATH>",
    access_token = "<YOUR_DATABRICKS_ACCESS_TOKEN>"
)

# パラメータ化されたSQLクエリを実行し、結果をカーソルで取得
cursor = connection.cursor()

sql_query = """
SELECT *
FROM bright_data_zillow_properties_information_dataset.データセット.zillow_properties
WHERE state LIKE :state AND homestatus LIKE :homestatus
LIMIT :row_limit
"""

params = {
    "state": "NY",
    "homestatus": "FOR_SALE",
    "row_limit": 10
}

# クエリを実行
cursor.execute(sql_query, params)

result = cursor.fetchall()
# 結果を1行ずつ出力
for row in result[:2]:
  print(row)

# カーソルとSQLウェアハウス接続を閉じる
cursor.close()
connection.close()

スクリプトを実行すると、次のような出力が生成されます:

The output data for a single row

各行オブジェクトは Rowインスタンスであり、クエリ結果の単一レコードを表します。このデータを Python スクリプト内で直接処理できます。

RowインスタンスはasDict()メソッドでPythonの辞書に変換できる点に留意してください:

row_data = row.asDict()

これで完了です!Databricks上でBright Dataデータセットを様々な方法で操作・クエリする方法が理解できました。

まとめ

本記事では、DatabricksからBright DataのデータセットをREST API、CLI、専用SQLコネクタライブラリを用いてクエリする方法を学びました。示した通り、Databricksはデータプロバイダー(現在Bright Dataを含む)が提供する製品とやり取りする複数の手段を提供しています。

40以上の製品が利用可能なBright Dataの豊富なデータセットを、Databricks内で直接探索し、様々な方法でデータにアクセスできます。

Bright Dataアカウントを無料で作成し、今すぐデータソリューションの活用を開始しましょう!