Cette page explique comment utiliser JSON avec Spanner.
Le type de données JSON est un type de données semi-structuré utilisé pour stocker des données JSON (JavaScript Object Notation). Les spécifications du format JSON sont décrites dans le document RFC 7159.
Le format JSON est utile pour compléter un schéma relationnel pour des données éparses ou ayant une structure faiblement définie ou changeante. Cependant, l'optimiseur de requête s'appuie sur le modèle relationnel pour filtrer, joindre, agréger et trier efficacement à grande échelle. Les requêtes sur les objets JSON ont moins d'optimisations intégrées et de possibilités d'inspection et d'ajustement des performances.
Spécifications
Le type JSON Spanner stocke une représentation normalisée de l'entrée un document JSON.
- JSON peut être imbriqué jusqu'à 80 niveaux.
- Les espaces ne sont pas conservés.
- Les commentaires ne sont pas acceptés. Les transactions ou les requêtes comportant des commentaires échoueront.
- Les membres d'un objet JSON sont triés de façon lexicographique.
- L'ordre des éléments de tableau JSON est conservé.
- Si un objet JSON possède des clés en double, seule la première est conservée.
- Le type et la valeur des types primitifs (chaîne, booléen, nombre et valeur nulle) sont conservés.
- Les valeurs de type de chaîne sont conservées exactement.
- Les valeurs de type numérique sont conservées mais leur représentation textuelle peut être modifiée à la suite du processus de normalisation. Par exemple, un nombre d'entrée de 10 000 peut avoir une représentation normalisée de 1e+4. La sémantique de conservation de valeur numérique est la suivante :
- Les entiers signés compris dans la plage [INT64_MIN, INT64_MAX] sont conservés.
- Les entiers non signés compris dans la plage [0, UINT64_MAX] sont conservés.
- Les valeurs de type "Double" pouvant être converties en chaîne puis reconverties en "Double" sans perte de précision sont conservées. Si une valeur "Double" ne peut pas être convertie de cette manière, la transaction ou la requête échoue.
- Par exemple,
SELECT JSON '2.2412421353246235436'
échoue. PARSE_JSON('2.2412421353246235436', wide_number_mode=>'round')
est une solution de contournement fonctionnelle qui renvoieJSON '2.2412421353246237'
.
- Par exemple,
- Utilisez les
TO_JSON()
,JSON_OBJECT()
, et leJSON_ARRAY()
pour créer des documents JSON en SQL. Ces fonctions implémentent les caractères d'échappement et de guillemets nécessaires.
La taille maximale autorisée du document normalisé est de 2 621 440 caractères UTF-8.
Peut être vide
Les valeurs JSON null
sont traitées comme des valeurs SQL non nulles.
Exemple :
SELECT (JSON '{"a":null}').a IS NULL; -- Returns FALSE
SELECT (JSON '{"a":null}').b IS NULL; -- Returns TRUE
SELECT JSON_QUERY(JSON '{"a":null}', "$.a"); -- Returns a JSON 'null'
SELECT JSON_QUERY(JSON '{"a":null}', "$.b"); -- Returns a SQL NULL
Encodage
Les documents JSON doivent être encodés au format UTF-8. Les transactions ou les requêtes avec des documents JSON encodés dans d'autres formats renvoient une erreur.
Créer une table avec des colonnes JSON
Vous pouvez ajouter une colonne JSON à une table lors de sa création. Type JSON peuvent avoir une valeur nulle.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
VenueFeatures JSON,
DateOpened DATE,
) PRIMARY KEY(VenueId);
Ajouter et supprimer des colonnes JSON dans des tables existantes
Une colonne JSON peut également être ajoutée ou supprimée des tables existantes.
ALTER TABLE Venues ADD COLUMN VenueDetails JSON;
ALTER TABLE Venues DROP COLUMN VenueDetails;
L'exemple suivant montre comment ajouter une colonne JSON
appelée VenueDetails
pour
la table Venues
à l'aide des bibliothèques clientes Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Modifier des données JSON
L'exemple suivant montre comment mettre à jour les données JSON
à l'aide de la méthode
les bibliothèques clientes Spanner.
C++
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Ruby
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Interroger des données JSON
L'exemple suivant montre comment interroger des données JSON
à l'aide de la méthode
les bibliothèques clientes Spanner.
C++
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
C#
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Go
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
PHP
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Ruby
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Restrictions
- Les colonnes JSON ne peuvent pas être utilisées dans ORDER BY.
- Les colonnes de type JSON ne sont pas compatibles avec l'indexation. Toutefois, vous pouvez créer un index sur une colonne générée qui extrait une valeur scalaire d'un élément JSON.
Dans l'exemple ci-dessous, un index VenueMisc
est créé sur la colonne générée.
Details
, qui extrait une valeur scalaire de l'élément JSON VenueDetails
.
L'élément json_path modifiable est une valeur de type STRING dans
Format JSONPath.
CREATE TABLE Venues (
VenueId INT64 NOT NULL,
VenueName STRING(1024),
VenueAddress STRING(1024),
DateOpened DATE,
VenueDetails JSON,
Details STRING(MAX) AS (JSON_VALUE(VenueDetails, json_path)) STORED
) PRIMARY KEY(VenueId);
CREATE INDEX VenueMisc ON Venues(Details);
Références
- Type de données JSON
- Fonctions JSON
- Opérateurs JSON: