Comprendre les préfixes personnalisés pour les objets Amazon S3 - Amazon Data Firehose

La diffusion de flux Amazon Data Firehose vers les tables Apache Iceberg dans Amazon S3 est en version préliminaire et peut faire l'objet de modifications.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Comprendre les préfixes personnalisés pour les objets Amazon S3

Les objets livrés à Amazon S3 suivent le format de nom de <evaluated prefix><suffix>. Vous pouvez spécifier votre préfixe personnalisé qui inclut les expressions évaluées lors de l'exécution. Le préfixe personnalisé que vous spécifiez remplacera le préfixe par défaut de. YYYY/MM/dd/HH

Vous pouvez utiliser les expressions ayant le format suivant dans votre préfixe personnalisé : !{namespace:value}, où namespace peut être l'un des éléments suivants, comme expliqué dans les sections suivantes.

  • firehose

  • timestamp

  • partitionKeyFromQuery

  • partitionKeyFromLambda

Si un préfixe se termine par une barre oblique, il apparaît comme dossier dans le compartiment Amazon S3. Pour plus d'informations, consultez le format du nom d'objet Amazon S3 dans le Amazon Data FirehoseDeveloper Guide.

Espace de noms timestamp

Les valeurs valides pour cet espace de noms sont des DateTimeFormatter chaînes Java valides. Par exemple, au cours de l'année 2018, l'expression !{timestamp:yyyy} est évaluée sur 2018.

Lors de l'évaluation des horodatages, Firehose utilise l'horodatage d'arrivée approximatif du plus ancien enregistrement contenu dans l'objet Amazon S3 en cours d'écriture.

Par défaut, l'horodatage est activé. UTC Mais vous pouvez spécifier le fuseau horaire que vous préférez. Par exemple, vous pouvez configurer le fuseau horaire pour Asia/Tokyo dans le AWS Management Console ou dans le API paramétrage (CustomTimeZone) si vous souhaitez utiliser l'heure normale du Japon au lieu deUTC. Pour consulter la liste des fuseaux horaires pris en charge, consultez Amazon S3 Object Name Format.

Si vous utilisez l'espace de noms timestamp plusieurs fois dans la même expression de préfixe, chaque instance est évaluée sur le même instantané dans le temps.

Espace de noms firehose

Il existe deux valeurs que vous pouvez utiliser avec cet espace de noms : error-output-type et random-string. Le tableau suivant explique comment les utiliser.

Les valeurs de l'espace de noms firehose
Conversion Description Exemple d'entrée Exemple de sortie Remarques
error-output-type Évalue l'une des chaînes suivantes, en fonction de la configuration de votre stream Firehose et de la raison de l'échec : {processing-failed, -failed, splunk-failed AmazonOpenSearchService,,}. format-conversion-failed http-endpoint-failed

Si vous utilisez l'espace de noms plusieurs fois dans la même expression, chaque instance est évaluée sur la même chaîne d'erreur.

myPrefix/result=!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd} myPrefix/result=processing-failed/2018/08/03 La error-output-type valeur ne peut être utilisée que dans le ErrorOutputPrefix champ.
random-string

Évaluation sur une chaîne aléatoire de 11 caractères. Si vous utilisez l'espace de noms plusieurs fois dans la même expression, chaque instance est évaluée sur une nouvelle chaîne aléatoire.

myPrefix/!{firehose:random-string}/ myPrefix/046b6c7f-0b/ Vous pouvez l'utiliser avec les deux types de préfixe.

Vous pouvez le placer au début de la chaîne de format pour obtenir un préfixe aléatoire, ce qui est parfois nécessaire pour atteindre un débit extrêmement élevé avec Amazon S3.

Espaces de noms partitionKeyFromLambda et partitionKeyFromQuery

Pour le partitionnement dynamique, vous devez utiliser le format d'expression suivant dans le préfixe de votre compartiment S3 : !{namespace:value}, où l'espace de noms peut être partitionKeyFromQuery ou partitionKeyFromLambda, ou les deux. Si vous utilisez l'analyse en ligne pour créer les clés de partitionnement de vos données sources, vous devez spécifier une valeur de préfixe de compartiment S3 qui consiste en des expressions spécifiées dans le format suivant : "partitionKeyFromQuery:keyID". Si vous utilisez un AWS Fonction Lambda Pour créer des clés de partitionnement pour vos données sources, vous devez spécifier une valeur de préfixe de compartiment S3 composée d'expressions spécifiées au format suivant :. "partitionKeyFromLambda:keyID" Pour plus d'informations, consultez la section « Choisissez Amazon S3 pour votre destination » dans Création d'un flux Amazon Firehose.

Règles sémantiques

Les règles suivantes s'appliquent aux expressions Prefix et ErrorOutputPrefix.

  • Pour l'espace de noms timestamp, n'importe quel caractère autre que des guillemets simples est évalué. En d'autres termes, n'importe quelle chaîne dans une séquence d'échappement avec des guillemets simples dans le champ value est prise littéralement.

  • Si vous spécifiez un préfixe qui ne contient pas d'expression d'espace de noms d'horodatage, Firehose ajoute l'expression !{timestamp:yyyy/MM/dd/HH/} à la valeur du champ. Prefix

  • La séquence !{ peut uniquement apparaître dans les expressions !{namespace:value}.

  • ErrorOutputPrefix peut être null uniquement si Prefix ne contient pas d'expressions. Dans ce cas, Prefix correspond à <specified-prefix>yyyy/MM/DDD/HH/ et ErrorOutputPrefix correspond à <specified-prefix><error-output-type>YYYY/MM/DDD/HH/. DDD représente le jour de l'année.

  • Si vous spécifiez une expression pour ErrorOutputPrefix, vous devez inclure au moins une instance de !{firehose:error-output-type}.

  • Prefix ne peut pas contenir !{firehose:error-output-type}.

  • Ni Prefix ni ErrorOutputPrefix ne peuvent être supérieurs à 512 caractères après leur évaluation.

  • Si la destination est Amazon Redshift, Prefix ne doit pas contenir d'expressions et ErrorOutputPrefix doit être null.

  • Lorsque la destination est Amazon OpenSearch Service ou Splunk, et qu'aucune n'ErrorOutputPrefixest spécifiée, Firehose utilise Prefix le champ pour les enregistrements ayant échoué.

  • Lorsque la destination est Amazon S3, les préfixes Prefix et ErrorOutputPrefix dans la configuration de destination Amazon S3 sont utilisés pour les enregistrements ayant réussi et les enregistrements ayant échoué, respectivement. Si vous utilisez le plugin AWS CLI ou leAPI, vous pouvez l'utiliser ExtendedS3DestinationConfiguration pour spécifier une configuration de sauvegarde Amazon S3 avec son propre Prefix etErrorOutputPrefix.

  • Lorsque vous utilisez le AWS Management Console et définissez la destination sur Amazon S3, Firehose utilise le Prefix et ErrorOutputPrefix dans la configuration de destination pour les enregistrements réussis et les enregistrements échoués, respectivement. Si vous spécifiez un préfixe à l'aide d'expressions, vous devez spécifier le préfixe d'erreur, y compris. !{firehose:error-output-type}

  • Lorsque vous l'utilisez ExtendedS3DestinationConfiguration avec AWS CLI, leAPI, ou AWS CloudFormation, si vous spécifiez unS3BackupConfiguration, Firehose ne fournit pas de valeur par défaut. ErrorOutputPrefix

  • Vous ne pouvez pas utiliser partitionKeyFromLambda d'partitionKeyFromQueryespaces de noms lorsque vous créez des ErrorOutputPrefix expressions.

Exemples de préfixe

Exemples de préfixes Prefix et ErrorOutputPrefix
Entrée Préfixe évalué (à 10 h 30 le 27 UTC août 2018)

Prefix : non spécifié

ErrorOutputPrefix: myFirehoseFailures/!{firehose:error-output-type}/

Prefix: 2018/08/27/10

ErrorOutputPrefix: myFirehoseFailures/processing-failed/

Prefix: !{timestamp:yyyy/MM/dd}

ErrorOutputPrefix : non spécifié

Saisie non valide : ErrorOutputPrefix ne peut pas être vide si le préfixe contient des expressions

Prefix: myFirehose/DeliveredYear=!{timestamp:yyyy}/anyMonth/rand=!{firehose:random-string}

ErrorOutputPrefix: myFirehoseFailures/!{firehose:error-output-type}/!{timestamp:yyyy}/anyMonth/!{timestamp:dd}

Prefix: myFirehose/DeliveredYear=2018/anyMonth/rand=5abf82daaa5

ErrorOutputPrefix: myFirehoseFailures/processing-failed/2018/anyMonth/10

Prefix: myPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/

ErrorOutputPrefix: myErrorPrefix/year=!{timestamp:yyyy}/month=!{timestamp:MM}/day=!{timestamp:dd}/hour=!{timestamp:HH}/!{firehose:error-output-type}

Prefix: myPrefix/year=2018/month=07/day=06/hour=23/

ErrorOutputPrefix: myErrorPrefix/year=2018/month=07/day=06/hour=23/processing-failed

Prefix: myFirehosePrefix/

ErrorOutputPrefix : non spécifié

Prefix: myFirehosePrefix/2018/08/27/

ErrorOutputPrefix: myFirehosePrefix/processing-failed/2018/08/27/