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

Flight service および Apache Arrow Flight プロトコルを使用して、プロジェクトまたはスペース内のデータの読み取りと書き込みを行うことができます。 R では、これを行うには、オープン・ソース Python pyarrow ライブラリーを呼び出して、 R reticulate ライブラリーを使用して Flight service を呼び出します。 このライブラリーは、 Python モジュール、クラス、および関数への R インターフェースを提供します。

R を使用してデータを読み取ったり書き込んだりするには、以下のようにします。

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

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

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

R からの Python の呼び出しについて詳しくは、以下を参照してください。

オープン・ソース Flight Arrow R の Flight クライアント API について詳しくは、Flight RPC サーバーへの接続を参照してください。

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

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

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

接続 ID を使用したスキーマおよび表要求の例 ( Git 統合がないプロジェクトのみ)

data_request = dict(
    "asset_id"= "ASSET_ID",
    "project_id|space_id|catalog_id" = "ID",
    "num_partitions"= NUM, # Optional
    "batch_size"= SIZE, # Optional
    "interaction_properties"= dict(
        "schema_name"= "SCHEMA",
        "table_name"= "TABLE"
        ),
    "fields"= list("FIELDS") # Optional
    )

接続名を使用したスキーマおよび表要求の例

data_request = dict(
    "connection_name"= "CONNECTION",
    "batch_size"= NUM, # Optional
    "interaction_properties"= dict(
        "schema_name"= "SCHEMA",
        "table_name"= "TABLE",
        "row_limit"= NUM
        ),
    "fields"= list("FIELDS") # Optional
    )

接続 ID を使用した SQL 要求の例 ( Git 統合のないプロジェクトのみ)

data_request = dict(
    "asset_id"= "ASSET_ID",
    "project_id|space_id|catalog_id" = "ID",
    "num_partitions"= NUM, # Optional
    "batch_size"= SIZE, # Optional
    "interaction_properties"= dict(
        "select_statement"= "SQL" )
    )

接続名を使用する SQL 要求の例

data_request = dict(
    "connection_name"= "CONNECTION",
    "num_partitions"= NUM, # Optional
    "batch_size"= SIZE, # Optional
    "interaction_properties"= dict(
        "select_statement"= "SELECT ... FROM <schema>.<table> WHERE ..."
        )
    )

資産 ID を使用したデータ・ファイル要求の例 ( Git 統合がないプロジェクトのみ)

data_request = dict(
    "asset_id"= "ASSET_ID",
    "project_id|space_id|catalog_id" = "ID",
    "num_partitions"= NUM, # Optional
    )

資産 名を使用した データ資産 要求の例

data_request = dict(
    "data_name"= "DATA ASSET",
    "interaction_properties"= dict(
        "infer_schema"= "true",
        "infer_as_varchar"= "false"
        )
    )

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

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

以下のコード例は、 R ノートブック内で Flight service を呼び出す方法を示しています。 これらの例では、 R ライブラリー reticulate と、 Python ライブラリー pyarrow および itc_utils を使用します。 itc_utils は、 IBM によって提供されるすべてのノートブックおよび RStudio ランタイム環境にプリインストールされ、これらの環境で使用できます。 詳しくは、 R ノートブックでの Flight service の使用 を参照してください。

接続名を使用してアクセスされる接続にあるスキーマ内の表からデータを読み取る例

# Schema and Table example using connection name
library("reticulate")
pa <- import("pyarrow")
library("arrow")

itcfs <- import("itc_utils.flight_service")
client <- itcfs$get_flight_client()

data_request = dict(
"connection_name"= "CONNECTION",
"batch_size"= NUM, # Optional
"interaction_properties"= dict(
    "schema_name"= "SCHEMA",
    "table_name"= "TABLE",
    "row_limit"= NUM
    ),
"fields"= list("FIELDS") # Optional
)

flightInfo <- itcfs$get_flight_info(client, data_request=data_request)
df <- as.data.frame(itcfs$read_tables(client, flightInfo, timeout=240))
head(df)

接続名を使用してアクセスされる SQL 接続からデータを読み取る例

library("reticulate")
pa <- import("pyarrow")
library("arrow")

itcfs <- import("itc_utils.flight_service")
client <- itcfs$get_flight_client()

data_request = dict(
"connection_name"= "CONNECTION",
"num_partitions"= NUM, # Optional
"batch_size"= SIZE, # Optional
"interaction_properties"= dict(
    "select_statement"= "SELECT * FROM SCHEMA.TABLE WHERE FIELD = 'field'"
    )
)

flightInfo <- itcfs$get_flight_info(client, nb_data_request=data_request)
df <- as.data.frame(itcfs$read_tables(client, flightInfo, timeout=240))
head(df)

以下のコード・スニペットは、データ・ソースにデータを書き戻す際に、カスタム作成データ要求を使用する方法のサンプルを示しています。

既存のデータベース表にデータを書き込むか、または表が存在しない場合は新規表を作成する例:

library("reticulate")
pa <- import("pyarrow")
library("arrow")

itcfs <- import("itc_utils.flight_service")
client <- itcfs$get_flight_client()

data_request = dict(
"connection_name"= "CONNECTION",
"interaction_properties"= dict(
    "schema_name"= "SCHEMA",
    "table_name"= "TABLE"
    )
)

itcfs$write_dataframe(DATA, nb_data_request = data_request)

既存の表のすべてのデータを置き換える例:

library("reticulate")
pa <- import("pyarrow")
library("arrow")

itcfs <- import("itc_utils.flight_service")
client <- itcfs$get_flight_client()

data_request = dict(
    "connection_name"= "CONNECTION",
    "interaction_properties"= dict(
        "schema_name"= "SCHEMA",
        "table_name"= "TABLE",
        "table_action"= "truncate",
        "write_mode"= "insert"
        )
)

itcfs$write_dataframe(DATA, nb_data_request = data_request)

詳細はこちら