PythonとSQLAlchemyを使用したExperience Platform データの管理
SQLAlchemyを使用して、Adobe Experience Platform データの管理の柔軟性を向上させる方法について説明します。 SQLに精通していない人にとって、SQLAlchemyはリレーショナルデータベースを扱う際の開発時間を大幅に短縮することができます。 このドキュメントでは、SQLAlchemyをQuery Serviceに接続し、Pythonを使用してデータベースを操作するための手順と例を示します。
SQLAlchemyは、SQL データベースに保存されているデータをPython オブジェクトに転送できるObject Relational Mapper (ORM)およびPython コードライブラリです。 次に、Python コードを使用して、Experience Platform データレイク内に保持されているデータに対してCRUD操作を実行できます。 これにより、PSQLのみを使用してデータを管理する必要がなくなります。
はじめに
SQLAlchemyをExperience Platformに接続するために必要な資格情報を取得するには、Experience Platform UIのQueries ワークスペースにアクセスする必要があります。 現在クエリワークスペースにアクセスできない場合は、組織管理者にお問い合わせください。
Query Service資格情報 credentials
資格情報を見つけるには、Experience Platform UIにログインし、左側のナビゲーションから「クエリ」、その後「資格情報」を選択します。 ログイン資格情報の検索方法について詳しくは、資格情報ガイド を参照してください。
ポート 80はクエリサービスへの接続に推奨されるポートですが、ポート 5432を使用することもできます。
QS資格情報にアクセスできたら、選択したPython エディターを開きます。
Pythonに資格情報を保存 store-credentials
Python エディターで、urllib.parse.quote ライブラリを読み込み、各資格情報変数をパラメーターとして保存します。 urllib.parse モジュールには、URL文字列をコンポーネントに分割するための標準インターフェイスが用意されています。 quote関数は、URL文字列の特殊文字を置き換えて、データをURL コンポーネントとして安全に使用できるようにします。 必要なコードの例を以下に示します。
from urllib.parse import quote
host = "<YOUR_HOST>"
port = "<YOUR_PORT>"
dbname = "<YOUR_DATABASE>"
user = "<YOUR_USERNAME>"
password = quote('''
<YOUR_PASSWORD>
''')
エンジン インスタンス [#create-engine]を作成します
変数を作成したら、create_engine関数をインポートし、SQLAlchemyでクエリサービス資格情報をコンパイルおよびフォーマットする文字列を作成します。 次に、create_engine関数を使用して、エンジンインスタンスを構築します。
create_engineは、エンジンのインスタンスを返します。 ただし、接続が必要なクエリが呼び出されるまで、クエリサービスへの接続は開かれません。サードパーティクライアントを使用してExperience Platformにアクセスする場合は、SSLを有効にする必要があります。 エンジンの一部として、connect_argsを使用して追加のキーワード引数を入力します。 SSL モードをrequireに設定することをお勧めします。 使用可能な値について詳しくは、SSL モードのドキュメント を参照してください。
次の例は、エンジンと接続文字列を初期化するために必要なPython コードを示しています。
from sqlalchemy import create_engine
db_string = "postgresql://{user}:{password}@{host}:{port}/{dbname}".format(
user=user,
password=password,
host=host,
port = port,
dbname = dbname
)
engine = create_engine(db_string, connect_args={'sslmode':'require'})
これで、Pythonを使用してExperience Platform データをクエリする準備が整いました。 次の例では、クエリサービスのテーブル名の配列を返します。
from sqlalchemy import inspect
insp = inspect(engine)
print(insp.get_table_names())