Python を使用した Flight service ・データ要求の例

Flight service および Apache Arrow フライト・プロトコルを使用して、プロジェクトまたはスペースで Python を使用してデータの読み取りと書き込みを行うことができます。

Python を使用してデータの読み取りまたは書き込みを行うには、以下のようにします。

  • Python ノートブックで、選択したプロジェクト 資産 からデータをロードするために生成されたコードを使用します。 この生成されたコードは、オープン・ソースの Python pyarrow ライブラリーへの呼び出しをラップする itc_utils ライブラリーを使用します。これにより、コードの読み取り可能性が向上し、コード・サイズが削減されます。

  • オープン・ソース Python pyarrow ライブラリーを使用して Flight service を呼び出すことにより、プロジェクトまたはスペース内のデータを読み取り/書き込みするための独自のコードを作成します。 以下の状況では、独自のコードを作成する必要があります。

    • 生成されたコードを変更する必要がある (例えば、実稼働環境で使用するため)
    • 生成されたコードを追加する機能は、 資産
    • このツールは、生成されたコードの追加をサポートしていません

以下のセクションでは、フライト・データ要求を使用した読み取り要求のデータ・ソースおよび対話式プロパティーを指定する方法について詳しく説明します。

データ要求の構文とプロパティーについて詳しくは、 フライト・データ要求 を参照してください。

データにアクセスするには、読み取りまたは書き込みを行う 資産 の記述を含む JSON 文書を使用して、データ要求オブジェクトを作成する必要があります。 Python では、辞書を使用してこれらの JSON 文書を構成できます。

Python でデータの読み取り要求または書き込み要求のデータ・ソースおよび対話式プロパティーを指定する方法を学習するために、以下のデータ要求の例を使用できます。 プロパティーは、データ・ソースによって異なります。

スキーマおよび表要求の例

data_request = {
    "asset_id": "ASSET_ID", # asset_id must point to a connection asset
    "project_id|space_id|catalog_id": "ID",
    "num_partitions": NUM, # Optional
    "batch_size": SIZE, # Optional
    "interaction_properties": {
        "schema_name": "schema",
        "table_name": "table"
    },
    "fields": "fields" # Optional
}

SQL 要求の例

data_request = {
    "asset_id": "ASSET_ID", # asset_id must point to a connection asset
    "project_id|space_id|catalog_id": "ID",
    "num_partitions": NUM, # Optional
    "batch_size": SIZE, # Optional
    "interaction_properties": {
        "select_statement": "SELECT ... FROM <schema>.<table> WHERE ..."
    }
}

Parquet ファイルのような データ資産 ・ファイルから読み取る要求の例

data_request = {
    "asset_id": "ASSET_ID", # asset_id must point to a connected data asset
    "project_id|space_id|catalog_id": "ID",
    "num_partitions": NUM, # Optional
    "fields": "fields" # Optional
}

Parquet ファイルからの読み取り要求の例

data_request = {
    "asset_id": "ASSET_ID",
    "project_id|space_id|catalog_id": "ID",
    "num_partitions": NUM, # Optional
    "batch_size": SIZE, # Optional
    "interaction_properties": {
        "folder": "FOLDER",
        "file": "FILE",
        "bucket": "BUCKET", # If using COS specify bucket in addition to folder/file
        "file_format": "parquet"
    },
    "fields": "fields" # Optional
}

接続プロパティーを渡す接続への要求の例

data_request = {
    "datasource_type": "dashdb",
    "connection_properties": {
        "database": "DBNAME",
        "password": "PASSWORD",
        "port": NUM,
        "host": "HOSTNAME",
        "ssl": true,
        "username": "CONNUSER"
    },
    "num_partitions": NUM, # Optional
    "batch_size": SIZE, # Optional
    "interaction_properties": {
        "schema_name": "schema",
        "table_name": "table",
    }
    "fields": "fields" # Optional
}

"connection_properties" および "interaction_properties" プロパティーは、コネクターによって異なります。 詳しくは、 Data and AI Common Core API データ・ソース・タイプ を参照してください。

フライト・データ要求を使用するコード・サンプル

以下のコード・サンプルは、 Flight service を Python ノートブック内で呼び出す方法を示しています。 サンプルは、データ・ソース接続に応じたデータ要求の違いを示しています。

Flight service を呼び出す方法を示すサンプルは、 itc_utils という Python ライブラリーを使用します。これは、ノートブックで使用するために IBM によって提供されます。 詳しくは、 Flight service ノートブックの 『 』 を参照してください。 Python

HTTP 接続のデータをロードするために生成されるコードで返されるデータ要求の例

import itc_utils.flight_service as itcfs
readClient = itcfs.get_flight_client()
HTTP_data_request = {
    'connection_name': """HTTP""",
    'interaction_properties': {
        'infer_schema': 'true'
    }
}
flightInfo = itcfs.get_flight_info(readClient, nb_data_request=HTTP_data_request)
data_df_1 = itcfs.read_pandas_and_concat(readClient, flightInfo)
data_df_1.head(10)

接続 ID を使用し、プロパティーを使用しないデータ要求の例

import itc_utils.flight_service as itcfs
readClient = itcfs.get_flight_client()
data_request = {
    'project_id': 'c01a0212-47cc-4cd4-8cc8-1dd92dbb4bde',
    'asset_id': 'a6c0117c-e6da-4d71-9da4-659edcec7ba5',
    'interaction_properties': {
        'infer_schema': 'true'
    }
}
flightInfo = itcfs.get_flight_info(readClient, data_request=data_request)
data_df_1 = itcfs.read_pandas_and_concat(readClient, flightInfo)
data_df_1.head(10)

プロパティーを使用した Db2 接続のデータ要求の例

import itc_utils.flight_service as itcfs
readClient = itcfs.get_flight_client()
data_request = {'datasource_type': {'entity': {'name': 'db2'}},
    'connection_properties': {'database': 'BLUDB',
    'password': '****',
    'username_password_security': 'clear_text',
    'port': '50001',
    'host': 'dashdb-123.services.dal.bluemix.net',
    'inherit_access_token': 'false',
    'username_password_encryption': 'default',
    'ssl': 'true',
    'username': 'myuser'},
    'interaction_properties': {'schema_name': 'MYSCHEMA', 'table_name': 'A_TABLE'}
}
flightInfo = itcfs.get_flight_info(readClient, data_request=data_request)
data_df_1 = itcfs.read_pandas_and_concat(readClient, flightInfo)
data_df_1.head(10)

詳細はこちら