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

Vous pouvez utiliser Flight service et le protocole Flight de Apache Arrow pour lire et écrire des données via Python dans un projet ou un espace.

Pour lire ou écrire des données à l'aide d' Python, vous pouvez :

  • Utilisez le code généré pour charger les données d'un élément de projet sélectionné dans un notebook d' Python. 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é

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

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 ».

Pour accéder aux données, vous devez créer un objet de requête de données à l'aide d'un document JSON contenant la description de la ressource que vous souhaitez lire ou modifier. Dans l' Python, vous pouvez utiliser des dictionnaires pour créer ces documents JSON.

Vous pouvez vous référer aux exemples de requêtes de données suivants pour savoir comment 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 Python. Les propriétés varient en fonction de la source de données.

Exemple de requête concernant un schéma et une table

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
}

Exemple de requête 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 ..."
    }
}

Exemple de requête de lecture d'un fichier de données, tel qu'un fichier 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
}

Exemple de requête de lecture à partir d'un fichier 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
}

Exemple de requête adressée à une connexion avec transmission des propriétés de connexion

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
}

Les "connection_properties""interaction_properties" propriétés varient en fonction du connecteur. Pour plus de détails, consultez la section « Types de sources de données de l'API Common Core pour les données et l'IA ».

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

Les exemples de code suivants montrent comment appeler « Flight service » dans les notebooks d' Python. Ces exemples illustrent les différences entre les requêtes de données en fonction de la connexion à la source de données.

Les exemples illustrant comment appeler Flight service utilisent une bibliothèque Python appelée itc_utils, fournie par IBM pour une utilisation dans les notebooks. Pour plus d'informations, consultez la rubrique « Flight service » dans les manuels d' Python.

Exemple de requête de données renvoyée dans le code généré pour charger les données d'une connexion 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)

Exemple de requête de données utilisant des identifiants de connexion et aucune propriété

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)

Exemple de requête de données pour une connexion Db2 à l'aide de propriétés

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)

En savoir plus