Interroger des données partitionnées externes avec organisation de fichiers sources au format Hive

Utilisez DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE pour créer une table partitionnée externe et générer les informations de partitionnement à partir du chemin d'accès au fichier du magasin d'objets en nuage.

Examinez les exemples de fichiers sources suivants dans le magasin d'objets :

custsales/month=2019-01/custsales-2019-01.csv

custsales/month=2019-02/custsales-2019-02.csv

custsales/month=2019-03/custsales-2019-03.csv

Avec ce nom, les valeurs de month sont saisies dans le nom de l'objet.

Pour créer une table externe partitionnée avec des données stockées dans cet exemple de format Hive, procédez comme suit :

  1. Stockez les données d'identification du magasin d'objets à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemple :

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL (
        credential_name => 'DEF_CRED_NAME',
        username => 'adb_user@example.com',
        password => 'password' );
    END;
    /

    La création de données d'identification pour accéder au magasin d'objets Oracle Cloud Infrastructure n'est pas requise si vous activez les données d'identification du principal de ressource. Pour plus d'informations, voir Utiliser un principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

    Cette opération stocke les données d'identification dans la base de données dans un format chiffré. Vous pouvez utiliser n'importe quel nom pour le nom des données d'identification. Notez que cette étape n'est requise qu'une seule fois, sauf si les données d'identification du magasin d'objets changent. Une fois les données d'identification stockées, vous pouvez utiliser le même nom pour créer des tables externes.

    Voir Procédure CREATE_CREDENTIAL pour plus d'informations sur les paramètres username et password pour différents services de stockage d'objets.

  2. Créez une table partitionnée externe au-dessus de vos fichiers sources à l'aide de la procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE.

    La procédure DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE prend en charge les fichiers partitionnés externes dans les services de stockage d'objets en nuage pris en charge. Les données d'identification sont une propriété de niveau table. Par conséquent, les fichiers externes doivent tous se trouver dans le même magasin d'objets en nuage.

    Exemple :

    BEGIN
        DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE(
            TABLE_NAME => 'sales_sample',
            CREDENTIAL_NAME => 'DEF_CRED_NAME',
            FILE_URI_LIST => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet',
            FORMAT => '{"type":"parquet", "schema": "first","partition_columns":[{"name":"month","type":"varchar2(100)"}]}');
    END;
    /

    Les paramètres sont les suivants :

    • table_name : Nom de la table externe.

    • credential_name : Nom des données d'identification créées à l'étape précédente.

    • file_uri_list : Il s'agit d'une liste délimitée par des virgules d'URI de fichier source. Deux options sont disponibles pour cette liste :

      • Indiquez une liste délimitée par des virgules d'URI de fichier individuels sans caractère générique.

      • Spécifiez un URI de fichier unique avec des caractères génériques, où les caractères génériques ne peuvent se trouver qu'après la dernière barre oblique "/". Le caractère "*" peut être utilisé comme caractère générique pour plusieurs caractères, "?" peut être utilisé pour un seul caractère.

    • column_list : Liste séparée par des virgules de noms de colonne et de types de données pour la table externe. La liste inclut les colonnes du fichier de données et celles dérivées du nom de l'objet (à partir des noms du chemin d'accès au fichier).

      La valeur column_list n'est pas requise lorsque les fichiers de données sont des fichiers structurés (Parquet, Avro ou ORC).

    • format : Définit les options que vous pouvez spécifier pour décrire le format du fichier source. Le paramètre partition_columns format spécifie les noms des colonnes de partition.

      Si les données de votre fichier source sont chiffrées, déchiffrez les données en spécifiant l'option de format encryption. Voir Décrypter les données lors de l'importation à partir du stockage d'objets pour plus d'informations sur le déchiffrement des données.

      Pour plus d'informations, voir Options de format d'ensemble DBMS_CLOUD.

    Dans cet exemple, namespace-string est l'espace de noms du stockage d'objets pour Oracle Cloud Infrastructure et bucketname est le nom du seau. Pour plus d'informations, voir Présentation des espaces de noms du stockage d'objets.

    L'appel DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE produirait la définition de table suivante :

    CREATE TABLE "ADMIN"."SALES_SAMPLE"
       ( "DAY_ID" TIMESTAMP (6),
          "GENRE_ID" NUMBER(19,0),
          "MOVIE_ID" NUMBER(19,0),
          "CUST_ID" NUMBER(19,0),
          "APP" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DEVICE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "OS" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "PAYMENT_METHOD" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "LIST_PRICE" BINARY_DOUBLE,
          "DISCOUNT_TYPE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
          "DISCOUNT_PERCENT" BINARY_DOUBLE,
          "ACTUAL_PRICE" BINARY_DOUBLE,
          "MONTH" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP"
       ) DEFAULT COLLATION "USING_NLS_COMP"
       ORGANIZATION EXTERNAL
        ( TYPE ORACLE_BIGDATA
          DEFAULT DIRECTORY "DATA_PUMP_DIR"
          ACCESS PARAMETERS
          ( com.oracle.bigdata.fileformat=parquet
    com.oracle.bigdata.filename.columns=["month"]
    com.oracle.bigdata.file_uri_list="https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/*.parquet"
    com.oracle.bigdata.credential.schema="ADMIN"
    com.oracle.bigdata.credential.name=CRED_OCI
    com.oracle.bigdata.trimspaces=notrim
      )
        )
       REJECT LIMIT 0
      PARTITION BY LIST ("MONTH")
     (PARTITION "P1" VALUES (('2019-01'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-01/*.parquet'
           ),
     PARTITION "P2" VALUES (('2019-02'))
          LOCATION
           ( 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/moviestream_landing/o/sales_sample/month=2019-02/*.parquet'
           ))
      PARALLEL ;

    Voir Procédure CREATE_EXTERNAL_PART_TABLE pour des informations détaillées sur les paramètres.

    Pour plus d'informations sur les services de stockage d'objets en nuage pris en charge, voir Formats d'URI DBMS_CLOUD.

  3. Vous pouvez maintenant exécuter des interrogations sur la table partitionnée externe que vous avez créée à l'étape précédente.

    Votre base de données Autonomous AI Database tire parti des informations de partitionnement de votre table partitionnée externe, en s'assurant que l'interrogation accède uniquement aux fichiers de données pertinents du magasin d'objets.

    Exemple :

    SELECT movie_id, month FROM sales WHERE month='2019-02'

    Les tables partitionnées externes que vous créez avec DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE incluent deux colonnes invisibles file$path et file$name. Ces colonnes permettent d'identifier le fichier d'où provient un enregistrement. Pour plus d'informations, voir Colonnes de métadonnées de table externe.

Si des rangées des fichiers sources ne correspondent pas aux options de format que vous avez spécifiées, l'interrogation signale une erreur. Vous pouvez utiliser les paramètres DBMS_CLOUD, tels que rejectlimit, pour supprimer ces erreurs. Vous pouvez également valider la table partitionnée externe que vous avez créée pour voir les messages d'erreur et les rangées rejetées afin de pouvoir modifier les options de format en conséquence. Voir Valider les données externes et Valider les données partitionnées externes pour plus d'informations.