COPYà partir du JSON format - Amazon Redshift

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.

COPYà partir du JSON format

La structure de JSON données est composée d'un ensemble d'objets ou de tableaux. Un JSON objet commence et se termine par des accolades et contient une collection non ordonnée de paires nom-valeur. Chaque paire de nom et de valeur est séparée par deux points, et les paires sont séparées par des virgules. Le nom est une chaîne entre guillemets doubles. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes.

Un JSON tableau commence et se termine par des crochets et contient un ensemble ordonné de valeurs séparées par des virgules. Une valeur peut être une chaîne entre guillemets doubles, un nombre, un booléen vrai ou faux, une valeur nulle, un JSON objet ou un tableau.

JSONles objets et les tableaux peuvent être imbriqués, ce qui permet une structure de données hiérarchique. L'exemple suivant montre une structure de JSON données avec deux objets valides.

{ "id": 1006410, "title": "Amazon Redshift Database Developer Guide" } { "id": 100540, "name": "Amazon Simple Storage Service User Guide" }

Ce qui suit montre les mêmes données que deux JSON tableaux.

[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]

COPYoptions pour JSON

Vous pouvez définir les options suivantes lorsque vous utilisez COPY des données de JSON format :

  • 'auto' — charge COPY automatiquement les champs depuis le JSON fichier.

  • 'auto ignorecase'— charge COPY automatiquement les champs depuis le JSON fichier sans tenir compte du cas des noms de champs.

  • s3://jsonpaths_file— COPY utilise un JSONPaths fichier pour analyser les données JSON sources. Un JSONPathsfichier est un fichier texte qui contient un seul JSON objet dont le nom est "jsonpaths" associé à un tableau d'JSONPathexpressions. Si le nom est une chaîne autre que"jsonpaths", COPY utilise l''auto'argument au lieu du JSONPaths fichier.

Pour des exemples montrant comment charger des données à l'aide de 'auto''auto ignorecase', ou d'un JSONPaths fichier, et à l'aide d'JSONobjets ou de tableaux, consultezCopier à partir d'JSONexemples.

JSONPathoption

Dans la COPY syntaxe Amazon Redshift, une JSONPath expression indique le chemin explicite vers un élément de nom unique dans une structure de données JSON hiérarchique, en utilisant soit la notation entre crochets, soit la notation par points. Amazon Redshift ne prend en charge aucun JSONPath élément, tel que les caractères génériques ou les expressions de filtre, susceptibles de donner lieu à un chemin ambigu ou à plusieurs éléments de nom. Par conséquent, Amazon Redshift ne peut pas analyser des structures de données complexes, à plusieurs niveaux.

Voici un exemple de JSONPaths fichier contenant des JSONPath expressions utilisant la notation entre crochets. Le symbole du dollar ($) représente la structure de niveau racine.

{ "jsonpaths": [ "$['id']", "$['store']['book']['title']", "$['location'][0]" ] }

Dans l’exemple précédent, $['location'][0] fait référence au premier élément d’un tableau. JSONutilise une indexation matricielle basée sur zéro. Les index du tableau doivent être des nombres entiers positifs (supérieurs ou égaux à zéro).

L'exemple suivant montre le JSONPaths fichier précédent en utilisant la notation par points.

{ "jsonpaths": [ "$.id", "$.store.book.title", "$.location[0]" ] }

Vous ne pouvez pas combiner la notation d’accolades et la notation de points dans le tableau jsonpaths. Les accolades peuvent être utilisées dans la notation d’accolades et la notation de points pour faire référence à un élément du tableau.

Lorsque vous utilisez la notation par points, les JSONPath expressions ne peuvent pas contenir les caractères suivants :

  • Guillemet anglais (’)

  • Point ( . )

  • Crochets ([ ]), sauf pour faire référence à un élément de tableau

Si la valeur de la paire nom-valeur référencée par une JSONPath expression est un objet ou un tableau, l'objet ou le tableau entier est chargé sous forme de chaîne, y compris les accolades. Supposons, par exemple, que vos JSON données contiennent l'objet suivant.

{ "id": 0, "guid": "84512477-fa49-456b-b407-581d0d851c3c", "isActive": true, "tags": [ "nisi", "culpa", "ad", "amet", "voluptate", "reprehenderit", "veniam" ], "friends": [ { "id": 0, "name": "Martha Rivera" }, { "id": 1, "name": "Renaldo" } ] }

L'JSONPathexpression renvoie $['tags'] ensuite la valeur suivante.

"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"

L'JSONPathexpression renvoie $['friends'][1] ensuite la valeur suivante.

"{"id": 1,"name": "Renaldo"}"

Chaque JSONPath expression du jsonpaths tableau correspond à une colonne de la table cible Amazon Redshift. L’ordre des éléments du tableau jsonpaths doit correspondre à celui des colonnes de la table cible ou de la liste de colonnes, si une liste de colonnes est utilisée.

Pour des exemples montrant comment charger des données à l'aide de l''auto'argument ou d'un JSONPaths fichier, et à l'aide d'JSONobjets ou de tableaux, consultezCopier à partir d'JSONexemples.

Pour plus d'informations sur la façon de copier plusieurs JSON fichiers, consultezUtilisation d’un manifeste pour spécifier les fichiers de données.

Personnages d'évasion dans JSON

COPYse charge \n sous forme de caractère de nouvelle ligne et se charge \t sous forme de caractère de tabulation. Pour charger une barre oblique inverse, précédez-la d’une barre oblique inverse ( \\ ).

Supposons, par exemple, que vous disposiez des éléments suivants JSON dans un fichier nommé escape.json dans le compartiments3://amzn-s3-demo-bucket/json/.

{ "backslash": "This is a backslash: \\", "newline": "This sentence\n is on two lines.", "tab": "This sentence \t contains a tab." }

Exécutez les commandes suivantes pour créer la ESCAPES table et charger leJSON.

create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35)); copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as json 'auto';

Interrogez le ESCAPES tableau pour afficher les résultats.

select * from escapes; backslash | newline | tab ------------------------+-------------------+---------------------------------- This is a backslash: \ | This sentence | This sentence contains a tab. : is on two lines. (1 row)

Perte de précision numérique

Vous risquez de perdre en précision lorsque vous chargez des nombres à partir de fichiers de données JSON au format dans une colonne définie comme un type de données numérique. Certaines valeurs en virgule flottantes ne seront pas représentées de manière exacte sur les systèmes informatiques. Par conséquent, il est possible que les données que vous copiez à partir d'un JSON fichier ne soient pas arrondies comme prévu. Pour éviter une perte de précision, nous recommandons l’utilisation d’une des autres solutions suivantes :

  • Représenter le nombre sous la forme d’une chaîne en plaçant la valeur entre guillemets doubles.

  • ROUNDECÀ utiliser pour arrondir le nombre au lieu de le tronquer.

  • Au lieu d'utiliser JSON des fichiers AvroCSV, utilisez des fichiers texte séparés par des caractères ou à largeur fixe.