Exemples de requêtes de données « Flight service » avec R

Vous pouvez utiliser Flight service et le protocole Flight de Apache Arrow pour lire et écrire des données dans un projet ou un espace. Dans R, pour ce faire, il suffit d'utiliser la bibliothèque open source pyarrow Python afin d'appeler Flight service via la bibliothèque R reticulate. La bibliothèque fournit une interface R permettant d'accéder aux modules, classes et fonctions d' Python.

Pour lire ou écrire des données avec R, vous pouvez :

  • Utilisez le code généré pour vous afin de charger les données d'un élément de projet sélectionné dans un notebook. Ce code généré utilise la itc_utils bibliothèque, qui encapsule les appels à la bibliothèque open source pyarrow Python, améliorant ainsi la lisibilité du code tout en réduisant sa taille.

  • Écrivez votre propre code pour lire et écrire des données dans un projet ou un espace à l'aide de la bibliothèque open source pyarrow Python afin d'appeler Flight service. Vous devez écrire votre propre code dans les situations suivantes :

    • Le code généré nécessite des modifications, par exemple pour être utilisé dans un environnement de production
    • La fonctionnalité permettant d'ajouter du code généré n'est pas disponible pour cet élément
    • L'outil ne prend pas en charge l'ajout de code généré

Pour plus d'informations sur l'appel d' Python depuis R, voir :

Pour plus d'informations sur l'API client Flight issue du projet open source Flight Arrow R, consultez la section « Connexion aux serveurs Flight RPC ».

Les sections suivantes fournissent plus de détails sur la manière dont vous pouvez définir la source de données et les propriétés interactives pour les requêtes de lecture ou d'écriture à l'aide des requêtes de données de vol.

Pour plus d'informations sur la syntaxe et les propriétés des requêtes de données, consultez la section « Requêtes de données de vol ».

Vous pouvez vous référer aux exemples de requêtes de données suivants pour apprendre à définir la source de données et les propriétés interactives des requêtes de lecture ou d'écriture de données dans R. Les propriétés varient en fonction de la source de données. Ces exemples utilisent reticulate pour créer des dictionnaires Python.

Exemple de requête de schéma et de table à l'aide d'un identifiant de connexion (uniquement dans les projets ne disposant pas de l'intégration d' 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
    )

Exemple de requête de schéma et de table utilisant un nom de connexion

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
    )

Exemple de requête SQL utilisant un identifiant de connexion (uniquement dans les projets ne disposant pas de l'intégration d' 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" )
    )

Exemple de requête SQL utilisant un nom de connexion

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

Exemple de demande de fichier de données à l'aide de l'identifiant de ressource (uniquement dans les projets ne disposant pas de l'intégration d' Git )

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

Exemple de demande de ressource de données à l'aide du nom de la ressource

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

Les propriétés "connection_properties""interaction_properties" et varient selon le connecteur. Pour plus de détails, consultez la section « Data and AI Common Core API - Liste des types de sources de données ».

Exemples de code utilisant les requêtes de données de vol

Les exemples de code suivants montrent comment appeler la fonction ` Flight service ` dans des notebooks R. Ces exemples utilisent la bibliothèque R reticulate ainsi que les bibliothèques Pythonpyarrow et itc_utils. itc_utils est préinstallé dans tous les environnements d'exécution pour ordinateurs portables et RStudio fournis par IBM afin d'être utilisé dans ces environnements. Pour plus d'informations, consultez la section « Utilisation de l' Flight service » dans les notebooks R.

Exemple de lecture de données provenant d'une table d'un schéma via une connexion accessible à l'aide de son nom

# 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)

Exemple de lecture de données à partir d'une connexion SQL accessible via son nom

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)

Les extraits de code suivants montrent comment utiliser des requêtes de données personnalisées lors de la réécriture de données dans une source de données :

Exemple permettant d'écrire des données dans une table de base de données existante ou de créer une nouvelle table si aucune n'existe :

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)

Exemple pour remplacer toutes les données d'une table existante :

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)

En savoir plus