La source de données OSS permet la lecture et l'écriture de données sur OSS. Cette rubrique explique comment DataWorks prend en charge la synchronisation des données OSS.
Types de champs pris en charge et limitations
Lecture des données par lots
OSS Reader lit les données depuis OSS et les convertit dans un format exploitable par Data Integration. OSS étant un service de stockage de données non structurées, le lecteur offre les fonctionnalités suivantes.
Pris en charge | Non pris en charge |
|
|
Lorsque vous préparez des données dans OSS, les fichiers CSV doivent être conformes au format CSV standard. Par exemple, vous devez échapper tout guillemet double (") dans une colonne en le remplaçant par deux guillemets doubles (""), sinon le fichier risque d'être fractionné incorrectement. Si un fichier contient plusieurs délimiteurs, nous vous recommandons d'utiliser le type texte.
OSS est une source de données non structurée qui stocke des données de type fichier. Avant de synchroniser les données, vérifiez que la structure des champs des données à synchroniser correspond à vos attentes. De même, si la structure des données d'une source non structurée change, vous devez confirmer à nouveau la structure des champs dans la configuration de la tâche. Dans le cas contraire, des erreurs de synchronisation des données peuvent se produire.
Écriture des données par lots
OSS Writer convertit les données du protocole Data Integration en fichiers texte sur OSS. OSS étant un service de stockage de données non structurées, l'outil d'écriture offre les fonctionnalités suivantes.
Pris en charge | Non pris en charge |
|
|
|
Catégorie |
Type de colonne Data Integration |
|
Entier |
LONG |
|
Chaîne |
STRING |
|
Virgule flottante |
DOUBLE |
|
Booléen |
BOOLEAN |
|
Date et heure |
DATE |
Écriture en temps réel
Prend en charge les capacités d'écriture en temps réel.
L'écriture en temps réel sur une seule table vers des lacs de données est prise en charge : Hudi (0,12.x), Paimon et Iceberg.
Créer une source de données
Avant de développer une tâche de synchronisation dans DataWorks, vous devez ajouter la source de données requise à DataWorks en suivant les instructions fournies dans Configuration de la source de données. Vous pouvez consulter les descriptions des paramètres dans la console DataWorks pour comprendre la signification des paramètres lors de l'ajout d'une source de données.
Pour créer une source de données OSS entre différents comptes Alibaba Cloud, vous devez accorder les autorisations requises aux comptes correspondants. Pour plus d'informations, consultez Utilisation des stratégies de bucket pour accorder un accès intercomptes à OSS.
Si vous utilisez le mode d'autorisation basé sur les rôles RAM pour configurer une source de données OSS, consultez Autorisation basée sur les rôles RAM : Configuration d'une source de données pour plus d'informations.
Pour créer une source de données OSS entre différentes régions, nous vous recommandons d'utiliser le point de terminaison public. Pour plus d'informations, consultez Domaines d'accès et connectivité réseau.
Développement de tâches de synchronisation des données
Pour obtenir des informations sur le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.
Guide de configuration des tâches de synchronisation par lots sur une seule table
Pour la procédure, consultez Configuration sans code via l'interface utilisateur et Configuration en mode script.
Pour tous les paramètres et exemples de scripts disponibles en mode script, consultez Annexe : Exemples de scripts et description des paramètres ci-dessous.
Guide de configuration des tâches de synchronisation en temps réel sur une seule table
Pour la procédure, consultez Configuration des tâches de synchronisation en temps réel sur une seule table.
Guide de configuration de la synchronisation complète de la base de données
Pour la procédure, consultez Fonctionnalités des tâches de synchronisation par lots complète de la base de données et Fonctionnalités des tâches de synchronisation en temps réel complète de la base de données.
FAQ
Existe-t-il une limite au nombre de fichiers lors de la lecture des fichiers OSS ?
Annexe : Exemples de scripts et description des paramètres
Configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code
Si vous souhaitez configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code, vous devez configurer les paramètres associés dans le script selon les exigences de format de script unifié. Pour plus d'informations, consultez Configuration en mode script. Les informations suivantes décrivent les paramètres que vous devez configurer pour les sources de données lors de la configuration d'une tâche de synchronisation par lots à l'aide de l'éditeur de code.
Exemple de script Reader : Exemple générique
L'exemple suivant présente un script générique pour OSS Reader.
{ "type":"job", "version":"2.0",//The version number. "steps":[ { "stepType":"oss",//The plug-in name. "parameter":{ "nullFormat":"",//The string that represents a null value. "compress":"",//The text compression type. "datasource":"",//The data source. "column":[//The columns. { "index":0,//The column index. "type":"string"//The data type. }, { "index":1, "type":"long" }, { "index":2, "type":"double" }, { "index":3, "type":"boolean" }, { "format":"yyyy-MM-dd HH:mm:ss", //The time format. "index":4, "type":"date" } ], "skipHeader":"",//CSV-like files may contain a header row. Set this parameter to skip the header. "encoding":"",//The encoding format. "fieldDelimiter":",",//The field delimiter. "fileFormat": "",//The text type. "object":[]//The object prefix. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":""//The maximum number of error records allowed. }, "speed":{ "throttle":true,//If throttle is set to false, the mbps parameter does not take effect, which means throttling is disabled. If throttle is set to true, throttling is enabled. "concurrent":1 //The number of concurrent threads. "mbps":"12",//The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Exemple de script Reader : Lire des fichiers ORC ou Parquet depuis OSS
OSS Reader lit les fichiers ORC ou Parquet depuis OSS en réutilisant HDFS Reader. En plus des paramètres existants d'OSS Reader, les paramètres étendus suivants sont ajoutés : Path (ORC) et FileFormat (ORC, Parquet) .
-
L'exemple suivant montre comment lire des fichiers ORC depuis OSS.
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61/orc__691b6815_9260_4037_9899_****", "column": [ { "index": 0, "type": "long" }, { "index": "1", "type": "string" }, { "index": "2", "type": "string" } ] } } -
L'exemple suivant montre comment lire des fichiers Parquet depuis OSS.
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"oss", "parameter":{ "nullFormat":"", "compress":"", "fileFormat":"parquet", "path":"/*", "parquetSchema":"message m { optional BINARY registration_dttm (UTF8); optional Int64 id; optional BINARY first_name (UTF8); optional BINARY last_name (UTF8); optional BINARY email (UTF8); optional BINARY gender (UTF8); optional BINARY ip_address (UTF8); optional BINARY cc (UTF8); optional BINARY country (UTF8); optional BINARY birthdate (UTF8); optional DOUBLE salary; optional BINARY title (UTF8); optional BINARY comments (UTF8); }", "column":[ { "index":"0", "type":"string" }, { "index":"1", "type":"long" }, { "index":"2", "type":"string" }, { "index":"3", "type":"string" }, { "index":"4", "type":"string" }, { "index":"5", "type":"string" }, { "index":"6", "type":"string" }, { "index":"7", "type":"string" }, { "index":"8", "type":"string" }, { "index":"9", "type":"string" }, { "index":"10", "type":"double" }, { "index":"11", "type":"string" }, { "index":"12", "type":"string" } ], "skipHeader":"false", "encoding":"UTF-8", "fieldDelimiter":",", "fieldDelimiterOrigin":",", "datasource":"wpw_demotest_oss", "envType":0, "object":[ "wpw_demo/userdata1.parquet" ] }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"dt=${bizdate}", "truncate":true, "datasource":"0_odps_wpw_demotest", "envType":0, "column":[ "id" ], "emptyAsNull":false, "table":"wpw_0827" }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"" }, "locale":"zh_CN", "speed":{ "throttle":false, "concurrent":2 } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Paramètres du script Reader
Paramètre | Description | Obligatoire | Valeur par défaut |
datasource | Le nom de la source de données. Le mode script permet d'ajouter des sources de données. La valeur de ce paramètre doit correspondre exactement au nom de la source de données ajoutée. | Oui | S.O. |
Object | Ce paramètre spécifie un ou plusieurs objets à synchroniser depuis OSS. Trois méthodes de configuration sont prises en charge : chemins explicites, chemins avec caractères génériques et chemins avec paramètres dynamiques. 1. Méthodes de configuration
Important
2. Mécanisme de lecture simultanée et performances La méthode de configuration détermine directement les performances de simultanéité de l'extraction des données :
| Oui | Aucune |
parquetSchema | Ce paramètre est utilisé lors de la lecture des données OSS au format de fichier Parquet. Il prend effet uniquement lorsque fileFormat est défini sur parquet et spécifie la définition de type du stockage Parquet. Assurez-vous que la configuration globale respecte la syntaxe JSON après avoir spécifié parquetSchema. Le format de configuration de parquetSchema est décrit comme suit :
L'exemple suivant montre une configuration type. | Non | Aucune |
column | La liste des champs à lire. type spécifie le type de données des données source, index spécifie le numéro de colonne (base zéro) dans le fichier texte auquel la colonne actuelle correspond, et value spécifie que la colonne actuelle est une constante. Au lieu de lire les données à partir du fichier source, le système génère automatiquement la colonne en fonction de la valeur spécifiée. Par défaut, vous pouvez lire toutes les données en tant que type STRING. La configuration est la suivante. Vous pouvez spécifier les informations de champ de colonne. La configuration est la suivante. Remarque Pour les informations de colonne que vous spécifiez, le paramètre type est obligatoire, et vous devez spécifier soit index, soit value. | Oui | Toutes les données sont lues en tant que type STRING. |
fileFormat | Le type de fichier. Type de fichier des objets OSS source. Par exemple, csv ou text. Les deux formats prennent en charge les délimiteurs personnalisés. | Oui | csv |
fieldDelimiter | Le délimiteur de champ pour la lecture des données. Remarque Lorsque OSS Reader lit les données, vous devez spécifier un délimiteur de champ. Si vous n'en spécifiez pas, une virgule (,) est utilisée par défaut. La virgule (,) est également la valeur par défaut dans la configuration de la console. Si le délimiteur est invisible, saisissez son encodage Unicode. Par exemple, \u001b ou \u007c. | Oui | , |
lineDelimiter | Le délimiteur de ligne pour la lecture des données. Remarque Ce paramètre prend effet uniquement lorsque fileFormat est défini sur text. | Non | S.O. |
compress | Le type de compression pour les fichiers texte. Par défaut, ce paramètre est laissé vide, ce qui indique que les données ne sont pas compressées. Valeurs valides : gzip, bzip2 et zip. | Non | Pas de compression |
encoding | L'encodage utilisé pour lire les fichiers. | Non | utf-8 |
nullFormat | Les chaînes standard ne peuvent pas être utilisées pour définir null (pointeur nul) dans les fichiers texte. Data Integration fournit le paramètre nullFormat pour définir quelles chaînes peuvent représenter null. Exemples :
| Non | Aucune |
skipHeader | Les fichiers de type CSV peuvent contenir une ligne d'en-tête avec des titres de colonnes qu'il faut ignorer. Par défaut, l'en-tête n'est pas ignoré. skipHeader n'est pas pris en charge en mode fichier compressé. | Non | false |
csvReaderConfig | La configuration pour la lecture des fichiers de type CSV. Ce paramètre est de type MAP. CsvReader est utilisé pour lire les fichiers de type CSV et prend en charge diverses configurations. Si ce paramètre n'est pas spécifié, les valeurs par défaut sont utilisées. | Non | Aucune |
successOnNoObject | Indique si la tâche se termine avec succès lorsqu'aucun objet n'existe dans le chemin de lecture spécifié. Si ce paramètre est défini sur false, la tâche échoue. Si ce paramètre est défini sur true, la tâche se termine avec succès sans écrire aucune donnée. Ce paramètre s'applique aux scénarios de synchronisation périodique où le chemin source peut être vide. En mode d'interface utilisateur sans code, ce paramètre correspond à « Allow Missing Source Files » et n'est affiché que lorsque fileFormat est défini sur csv ou text. | Non | false |
minLastModified | Spécifie que seuls les fichiers dont l'heure de dernière modification est égale ou postérieure à l'heure spécifiée sont synchronisés. Le format est | Non | S.O. |
maxLastModified | Synchronise uniquement les fichiers dont l'heure de dernière modification est antérieure à l'heure spécifiée. Le format est | Non | S.O. |
Démonstration du script Writer : exemple général
Voici un exemple de script général pour OSS Writer.
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"oss",// Le nom du plug-in. "parameter":{ "nullFormat":"",// Le format null fourni par Data Integration, qui définit quelles chaînes peuvent représenter null. "dateFormat":"",// Le format de date. "datasource":"",// La source de données. "writeMode":"",// Le mode d'écriture. "writeSingleObject":"false", // Indique s'il faut écrire les données synchronisées dans un seul fichier OSS. "encoding":"",// Le format d'encodage. "fieldDelimiter":","// Le délimiteur de champ. "fileFormat":"",// Le format de fichier. "object":""// Le préfixe d'objet. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// Le nombre maximal d'enregistrements d'erreur autorisés. }, "speed":{ "throttle":true,// Si throttle est défini sur false, le paramètre mbps ne prend pas effet et la bande passante n'est pas limitée. Si throttle est défini sur true, la bande passante est limitée. "concurrent":1, // Le nombre de threads simultanés. "mbps":"12"// Le taux de limitation. 1 mbps = 1 Mo/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Exemple de script Writer : Écriture de fichiers ORC ou Parquet dans OSS
OSS prend en charge l'écriture de fichiers ORC ou Parquet en réutilisant HDFS Writer. Outre les paramètres existants d'OSS Writer, des paramètres de configuration étendus tels que Path et FileFormat sont ajoutés. Pour plus d'informations sur ces paramètres, consultez la rubrique HDFS Writer.
Voici un exemple d'écriture de fichiers ORC ou Parquet dans OSS :
L'exemple ci-dessous est fourni à titre indicatif uniquement. Adaptez les paramètres en fonction des noms et des types de vos colonnes réelles. Ne copiez pas et n'utilisez pas directement cet exemple.
-
Écriture de fichiers ORC dans OSS
Pour écrire des fichiers ORC, seul le mode script est pris en charge. Vous devez basculer vers le mode script pour la configuration. Définissez fileFormat sur
orc, définissez path sur le chemin du fichier à écrire et configurez column au format{"name":"nom_de_votre_colonne","type": "type_de_votre_colonne"}.Les types ORC suivants sont pris en charge pour l'écriture :
Type de champ
Écriture par lot dans OSS (format ORC)
TINYINT
Pris en charge
SMALLINT
Pris en charge
INT
Pris en charge
BIGINT
Pris en charge
FLOAT
Pris en charge
DOUBLE
Pris en charge
TIMESTAMP
Pris en charge
DATE
Pris en charge
VARCHAR
Pris en charge
STRING
Pris en charge
CHAR
Pris en charge
BOOLEAN
Pris en charge
DECIMAL
Pris en charge
BINARY
Pris en charge
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "orc", "path": "/tests/case61", "fileName": "orc", "writeMode": "append", "column": [ { "name": "col1", "type": "BIGINT" }, { "name": "col2", "type": "DOUBLE" }, { "name": "col3", "type": "STRING" } ], "writeMode": "append", "fieldDelimiter": "\t", "compress": "NONE", "encoding": "UTF-8" } } -
Écriture dans OSS au format Parquet
{ "stepType": "oss", "parameter": { "datasource": "", "fileFormat": "parquet", "path": "/tests/case61", "fileName": "test", "writeMode": "append", "fieldDelimiter": "\t", "compress": "SNAPPY", "encoding": "UTF-8", "parquetSchema": "message test { required int64 int64_col;\n required binary str_col (UTF8);\nrequired group params (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired binary value (UTF8);\n}\n}\nrequired group params_arr (LIST) {\nrepeated group list {\nrequired binary element (UTF8);\n}\n}\nrequired group params_struct {\nrequired int64 id;\n required binary name (UTF8);\n }\nrequired group params_arr_complex (LIST) {\nrepeated group list {\nrequired group element {\n required int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_complex (MAP) {\nrepeated group key_value {\nrequired binary key (UTF8);\nrequired group value {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}\nrequired group params_struct_complex {\nrequired int64 id;\n required group detail {\nrequired int64 id;\n required binary name (UTF8);\n}\n}\n}", "dataxParquetMode": "fields" } }
Paramètres du script Writer
Paramètre | Description | Obligatoire | Valeur par défaut |
datasource | Le nom de la source de données. Vous pouvez ajouter une source de données en mode script. La valeur de ce paramètre doit correspondre au nom de la source de données que vous ajoutez. | Oui | S.O. |
object | Le nom du fichier dans lequel OSS Writer écrit. OSS utilise les noms de fichiers pour simuler une structure de répertoires. OSS impose les limites suivantes sur les noms d'objets :
Si vous ne souhaitez pas de suffixe UUID aléatoire, nous vous recommandons de définir | Oui | S.O. |
ossBlockSize | La taille de bloc pour les téléchargements multiparties OSS. La taille de bloc par défaut est de 16 Mo. Lorsque le format de fichier est parquet ou ORC, vous pouvez configurer ce paramètre au même niveau que le paramètre object. Les téléchargements multiparties OSS prennent en charge un maximum de 10 000 parties. Avec la taille de bloc par défaut, la taille maximale du fichier est de 160 Go. Si le nombre de parties dépasse la limite, vous pouvez augmenter la taille de bloc pour prendre en charge le téléchargement de fichiers plus volumineux. | Non | 16 |
writeMode | Spécifie comment OSS Writer gère les données existantes avant l'écriture :
| Oui | Aucune |
writeSingleObject | Indique s'il faut écrire les données dans un seul fichier lors de l'écriture dans OSS :
Remarque
| Non | false |
fileFormat | Le format du fichier de sortie. Les formats suivants sont pris en charge :
| Non | text |
compress | Le format de compression des fichiers de données écrits dans OSS. Vous devez configurer ce paramètre en mode script. Important La compression n'est pas prise en charge pour les formats CSV et TEXT. Les fichiers Parquet et ORC ne prennent en charge que la compression SNAPPY. | Non | Aucune |
fieldDelimiter | Le délimiteur de champ pour l'écriture. | Non | , |
encoding | La configuration d'encodage pour le fichier de sortie. | Non | utf-8 |
parquetSchema | Obligatoire lors de l'écriture dans OSS au format de fichier Parquet. Ce paramètre décrit le schéma du fichier de destination et ne prend effet que lorsque fileFormat est défini sur parquet. Le format est le suivant. Les éléments de configuration sont décrits comme suit :
Remarque Chaque définition de colonne doit se terminer par un point-virgule, y compris la dernière ligne. Exemple : | Non | Aucune |
nullFormat | Les chaînes standard ne peuvent pas être utilisées pour définir null (pointeur nul) dans les fichiers texte. Le système de synchronisation des données fournit nullFormat pour définir une chaîne qui représente null. Par exemple, si vous définissez | Non | Aucune |
header | La ligne d'en-tête lors de l'écriture dans OSS. Exemple : | Non | Aucune |
maxFileSize (configuration avancée, non prise en charge dans l'interface sans code) | La taille maximale d'un seul fichier objet écrit dans OSS. La valeur par défaut est de 10 000 × 10 Mo. Cela ressemble au contrôle de la taille des fichiers journaux lors de l'impression des journaux log4j. Lors du téléchargement multipartie OSS, chaque partie fait 10 Mo (ce qui est également la granularité minimale pour la rotation des journaux, ce qui signifie que toute valeur maxFileSize inférieure à 10 Mo est traitée comme 10 Mo). Chaque requête InitiateMultipartUploadRequest OSS prend en charge un maximum de 10 000 parties. Lorsque la rotation se produit, le nom de l'objet est généré en ajoutant des suffixes tels que _1,_2,_3 au préfixe d'objet original avec une chaîne aléatoire basée sur un UUID. Remarque
| Non | 100 000 |
suffix (configuration avancée, non prise en charge dans l'interface sans code) | Le suffixe ajouté au nom de fichier généré lors de l'écriture de la synchronisation des données. Par exemple, si vous définissez suffix sur .csv, le nom de fichier final est fileName****.csv. | Non | Aucun |
Annexe : Stratégies de conversion de type pour les données Parquet
Si vous ne configurez pas parquetSchema, DataWorks convertit les types de champs source en types de données Parquet selon les stratégies suivantes.
|
Type de données converti |
Type Parquet |
Type logique Parquet |
|
CHAR / VARCHAR / STRING |
BINARY |
UTF8 |
|
BOOLEAN |
BOOLEAN |
S.O. |
|
BINARY / VARBINARY |
BINARY |
S.O. |
|
DECIMAL |
FIXED_LEN_BYTE_ARRAY |
DECIMAL |
|
TINYINT |
INT32 |
INT_8 |
|
SMALLINT |
INT32 |
INT_16 |
|
INT/INTEGER |
INT32 |
S.O. |
|
BIGINT |
INT64 |
S.O. |
|
FLOAT |
FLOAT |
S.O. |
|
DOUBLE |
DOUBLE |
S.O. |
|
DATE |
INT32 |
DATE |
|
TIME |
INT32 |
TIME_MILLIS |
|
TIMESTAMP/DATETIME |
INT96 |
S.O. |