Interrogation des données externes avec des fichiers source ORC, Parquet ou Avro

Autonomous Database permet d'accéder facilement aux données ORC, Parquet ou Avro stockées dans une banque d'objets à l'aide de tables externes. Des métadonnées sont imbriquées dans les sources ORC, Parquet et Avro, et la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE peut utiliser ces métadonnées pour simplifier la création de tables externes.

Vous n'avez pas besoin de connaître la structure des données : DBMS_CLOUD peut examiner le fichier et convertir le contenu ORC, Parquet ou Avro en colonnes et types de données Oracle équivalents. Vous devez uniquement connaître l'emplacement des données dans la banque d'objets, indiquer leur type (ORC, Parquet ou Avro) et disposer d'informations d'identification permettant d'accéder au fichier source sur cette dernière.

Remarque

Les étapes d'utilisation des tables externes sont très similaires pour ORC, Parquet et Avro. Ces étapes illustrent l'utilisation d'un fichier source au format Parquet.

Le fichier source de cet exemple, sales_extended.parquet, contient des données au format Parquet. Pour interroger ce fichier dans Autonomous Database, procédez comme suit :

  1. Stockez vos informations d'identification de banque d'objets pour accéder à cette dernière à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL :
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

    Cette opération stocke les informations d'identification dans la base de données dans un format crypté. Vous pouvez utiliser n'importe quel nom d'informations d'identification. Cette étape est requise une seule fois, sauf si les informations d'identification de banque d'objets changent. Une fois les informations d'identification stockées, vous pouvez utiliser le même nom d'informations d'identification pour la création de tables externes.

    Reportez-vous à Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres username et password des différents services de stockage d'objet.

  2. Créez une table externe pour ORC, Parquet ou Avro sur vos fichiers source à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE.

    La procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE prend en charge les fichiers externes dans les services de stockage d'objet cloud pris en charge, notamment Oracle Cloud Infrastructure Object Storage, Azure Blob Storage ou Azure Data Lake Storage, Amazon S3 et compatible avec Amazon S3, notamment Oracle Cloud Infrastructure Object Storage, Google Cloud Storage et Wasabi Hot Cloud Storage. Les informations d'identification sont des propriétés de niveau table. Par conséquent, les fichiers externes doivent se trouver dans la même banque d'objets.

    Par défaut, les colonnes créées dans la table externe mettent automatiquement leurs types de données en correspondance avec les types de données Oracle pour les champs trouvés dans les fichiers source. Les noms de colonne de la table externe correspondent aux noms des champs source.

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first"}'
     );
    END;
    /     
    

    Les paramètres sont les suivants :

    • table_name : nom de la table externe.

    • credential_name : nom des informations d'identification créées à l'étape précédente. Le paramètre credential_name doit être conforme aux conventions de dénomination des objets Oracle. Pour plus d'informations, reportez-vous à Règles de dénomination des objets de base de données.

    • file_uri_list : liste des fichiers source à interroger séparés par une virgule. Le format URI pour les adresses dédiées est pris en charge dans les domaines commerciaux (OC1). Pour plus d'informations, reportez-vous à Adresses dédiées Object Storage et à Formats d'URI DBMS_CLOUD.

    • format : définit les options permettant de décrire le format du fichier source. Avec un fichier Parquet, utilisez le paramètre format pour indiquer type sur parquet. Avec un fichier Avro, utilisez le paramètre format pour définir type sur avro. Dans un fichier ORC, utilisez le paramètre format pour définir type sur orc.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Par défaut, le paramètre de format schema est défini, les colonnes et les types de données sont dérivés automatiquement et les champs de la source correspondent aux colonnes de la table externe par nom. Les types de données source sont convertis en types de données Oracle de colonne de table externe conformément à la mise en correspondance DBMS_CLOUD pour les types de données ORC, Parquet ou Avro. Les valeurs de paramètre schema valides sont les suivantes :

    • first : analyse le schéma du premier fichier ORC, Parquet ou Avro trouvé par DBMS_CLOUD dans la liste file_uri_list indiquée (first est la valeur par défaut pour schema).

    • all : analyse tous les schémas de tous les fichiers ORC, Parquet ou Avro trouvés dans la liste file_uri_list. Etant donné qu'il s'agit simplement de fichiers capturés dans une banque d'objets, il n'est pas garanti que les métadonnées de chaque fichier soient identiques. Par exemple, File1 peut contenir un champ appelé "adresse", tandis que File2 peut ne pas contenir ce champ. L'examen de chaque fichier pour dériver les colonnes est un peu plus coûteux mais peut être nécessaire si le premier fichier ne contient pas tous les champs requis.

    Remarque

    Si le paramètre column_list est indiqué, vous pouvez fournir les noms de colonne et les types de données de la table externe. La valeur schema, si elle est ignorée. Avec column_list vous pouvez limiter les colonnes de la table externe. Si column_list n'est pas indiqué, la valeur par défaut de schema est first.
  3. Vous pouvez maintenant exécuter des requêtes sur la table externe que vous avez créée à l'étape précédente:
    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    SELECT prod_id, quantity_sold, gender, city, income_level 
         FROM sales_extended_ext 
         WHERE ROWNUM < 8;
    
         PROD_ID     QUANTITY_SOLD     GENDER    CITY              INCOME_LEVEL
    1    13          1                 M         Adelaide          K: 250,000 – 299,999
    2    13          1                 M         Dolores           L: 300,000 and above
    3    13          1                 M         Cayuga            F: 110,000 – 129,999
    4    13          1                 F         Bergen op Zoom    C: 50,000 – 69,999
    5    13          1                 F         Neuss             J: 190,000 – 249,999
    6    13          1                 F         Darwin            F: 110,000 – 129,999
    7    13          1                 M         Sabadell          K:250,000 – 299,999
    

    Cette requête affiche les valeurs des lignes de la table externe. Si vous voulez interroger fréquemment ces données, après les avoir examinées, vous pouvez les charger dans une table avec DBMS_CLOUD.COPY_DATA.

Pour plus d'informations, reportez-vous à Procédure CREATE_EXTERNAL_TABLE pour les fichiers Avro, ORC ou Parquet et à Procédure COPY_DATA pour les fichiers Avro, ORC ou Parquet.

Pour plus d'informations sur les services de stockage d'objet cloud pris en charge, reportez-vous à Formats d'URI DBMS_CLOUD.

Interrogation des données externes avec des fichiers source ORC, Parquet ou Avro et définition explicite de la taille de colonne de texte

Lorsque vous accédez aux données ORC, Parquet ou Avro stockées dans une banque d'objets à l'aide de tables externes sur Autonomous Database, vous pouvez définir automatiquement ou explicitement la taille maximale des colonnes de texte.

Par défaut, la taille de la colonne de texte est définie en fonction de la valeur de MAX_STRING_SIZE.

Le fichier source de cet exemple, sales_extended.parquet, contient des données au format Parquet. Pour interroger ce fichier dans Autonomous Database et définir la taille maximale de colonne de texte, procédez comme suit :

  1. Stockez vos informations d'identification de banque d'objets pour accéder à cette dernière à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL :
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /
    

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

    Cette opération stocke les informations d'identification dans la base de données dans un format crypté. Vous pouvez utiliser n'importe quel nom d'informations d'identification. Cette étape est requise une seule fois, sauf si les informations d'identification de banque d'objets changent. Une fois les informations d'identification stockées, vous pouvez utiliser le même nom pour la création de tables externes.

    Reportez-vous à Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres username et password des différents services de stockage d'objet.

  2. Créez une table externe pour ORC, Parquet ou Avro sur vos fichiers source à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE et indiquez le paramètre de format maxvarchar.

    La procédure DBMS_CLOUD.CREATE_EXTERNAL_TABLE prend en charge les fichiers externes dans les services de stockage d'objet cloud pris en charge, notamment Oracle Cloud Infrastructure Object Storage, Azure Blob Storage ou Azure Data Lake Storage, Amazon S3 et compatible avec Amazon S3, notamment Oracle Cloud Infrastructure Object Storage, Google Cloud Storage et Wasabi Hot Cloud Storage. Les informations d'identification sont des propriétés de niveau table. Par conséquent, les fichiers externes doivent se trouver dans la même banque d'objets.

    Par défaut, les colonnes créées dans la table externe mettent automatiquement en correspondance leurs types de données avec les types de données Oracle pour les champs trouvés dans les fichiers source. Les noms de colonne de la table externe correspondent aux noms des champs source.

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first", "maxvarchar":"extended"}'
     );
    END;
    /     
    

    Les paramètres sont les suivants :

    • table_name : nom de la table externe.

    • credential_name : nom des informations d'identification créées à l'étape précédente. Le paramètre credential_name doit être conforme aux conventions de dénomination des objets Oracle. Pour plus d'informations, reportez-vous à Règles de dénomination des objets de base de données.

    • file_uri_list : liste des fichiers source à interroger séparés par une virgule. Le format URI pour les adresses dédiées est pris en charge dans les domaines commerciaux (OC1). Pour plus d'informations, reportez-vous à Adresses dédiées Object Storage et à Formats d'URI DBMS_CLOUD.

    • format : définit les options permettant de décrire le format du fichier source. Avec un fichier Parquet, utilisez le paramètre format pour définir type sur parquet. Avec un fichier Avro, utilisez le paramètre format pour définir type sur avro. Avec un fichier ORC, utilisez le paramètre format pour définir type sur orc.

      L'option maxvarchar avec la valeur extended indique que les colonnes de texte sont créées en tant que varchar(32767) sur une instance Autonomous Database avec une taille de chaîne étendue. Les valeurs possibles sont standard avec varchar(4000), extended avec varchar(32767) et auto. La valeur par défaut de maxvarchar est auto. Avec cette valeur, la taille de texte maximale est basée sur la valeur de MAX_STRING_SIZE.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Par défaut, le paramètre de format schema est défini, les colonnes et les types de données sont dérivés automatiquement et les champs de la source correspondent aux colonnes de la table externe par nom. Les types de données source sont convertis en types de données Oracle de colonne de table externe conformément à la mise en correspondance DBMS_CLOUD pour les types de données ORC, Parquet ou Avro. Les valeurs de paramètre schema valides sont les suivantes :

    • first : analyse le schéma du premier fichier ORC, Parquet ou Avro trouvé par DBMS_CLOUD dans la liste file_uri_list indiquée (first est la valeur par défaut pour schema).

    • all : analyse tous les schémas de tous les fichiers ORC, Parquet ou Avro trouvés dans la liste file_uri_list. Etant donné qu'il s'agit simplement de fichiers capturés dans une banque d'objets, il n'est pas garanti que les métadonnées de chaque fichier soient identiques. Par exemple, Fichier1 peut contenir un champ appelé "adresse", alors que Fichier2 peut ne pas contenir ce champ. L'examen de chaque fichier pour dériver les colonnes est un peu plus coûteux mais peut être nécessaire si le premier fichier ne contient pas tous les champs requis.

    Remarque

    Si le paramètre column_list est indiqué, vous pouvez fournir les noms de colonne et les types de données de la table externe. La valeur schema, si indiquée, est ignorée. Avec column_list, vous pouvez limiter les colonnes de la table externe. Si column_list n'est pas indiqué, la valeur par défaut de schema est first.
  3. Vous pouvez maintenant exécuter des requêtes sur la table externe que vous avez créée à l'étape précédente:
    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(32767) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(32767) 
    CITY                 VARCHAR2(32767) 
    STATE_PROVINCE       VARCHAR2(32767) 
    INCOME_LEVEL         VARCHAR2(32767)
    
    SELECT prod_id, quantity_sold, gender, city, income_level 
         FROM sales_extended_ext 
         WHERE ROWNUM < 8;
    
         PROD_ID     QUANTITY_SOLD     GENDER    CITY              INCOME_LEVEL
    1    13          1                 M         Adelaide          K: 250,000 – 299,999
    2    13          1                 M         Dolores           L: 300,000 and above
    3    13          1                 M         Cayuga            F: 110,000 – 129,999
    4    13          1                 F         Bergen op Zoom    C: 50,000 – 69,999
    5    13          1                 F         Neuss             J: 190,000 – 249,999
    6    13          1                 F         Darwin            F: 110,000 – 129,999
    7    13          1                 M         Sabadell          K:250,000 – 299,999
    

    Cette requête affiche les valeurs des lignes de la table externe. Si vous voulez interroger fréquemment ces données, après les avoir examinées, vous pouvez les charger dans une table avec DBMS_CLOUD.COPY_DATA.

    Si vous indiquez l'option format maxvarchar en tant que standard, les colonnes de texte varchar2() sont créées avec la taille 4000. Exemples :

    BEGIN
       DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
        table_name =>'sales_extended_ext',
        credential_name =>'DEF_CRED_NAME',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/sales_extended.parquet',
        format =>  '{"type":"parquet", "schema": "first", "maxvarchar":"standard"}'
     );
    END;
    /     
    

    Le paramètre format avec l'option maxvarchar définie sur la valeur standard indique que les colonnes de texte sont créées en tant que varchar(4000).

    DESC sales_extended_ext;
    Name           Null? Type           
    -------------- ----- -------------- 
    PROD_ID              NUMBER(10)     
    CUST_ID              NUMBER(10)     
    TIME_ID              VARCHAR2(4000) 
    CHANNEL_ID           NUMBER(10)     
    PROMO_ID             NUMBER(10)     
    QUANTITY_SOLD        NUMBER(10)     
    AMOUNT_SOLD          NUMBER(10,2)   
    GENDER               VARCHAR2(4000) 
    CITY                 VARCHAR2(4000) 
    STATE_PROVINCE       VARCHAR2(4000) 
    INCOME_LEVEL         VARCHAR2(4000)
    

Pour plus d'informations, reportez-vous à Procédure CREATE_EXTERNAL_TABLE pour les fichiers Avro, ORC ou Parquet et à Procédure COPY_DATA pour les fichiers Avro, ORC ou Parquet.

Pour plus d'informations sur les services de stockage d'objet cloud pris en charge, reportez-vous à DBMS_CLOUD Formats d'URI.