Cette page explique comment utiliser le type de données JSONB
lorsque vous utilisez Spanner.
JSONB
est un type de données PostgreSQL utilisé pour contenir des données semi-structurées
dans le dialecte PostgreSQL de Spanner. JSONB
contient des données
au format JSON (JavaScript Object Notation), qui respecte la spécification
décrit dans le document RFC 7159.
Spécifications
Le type de données JSONB
de Spanner stocke une représentation normalisée du document d'entrée. Cela implique ce qui suit:
- Les guillemets et les espaces blancs ne sont pas conservés.
- Les commentaires ne sont pas acceptés. Les transactions ou les requêtes avec commentaires échouent.
- Les clés d'objet sont d'abord triées par longueur de clé, puis de façon lexicographique par la longueur de clé d'objet équivalente. S'il existe des clés d'objet en double, seule la dernière l'une d'entre elles est préservée.
- Le type et la valeur des types primitifs (
string
,boolean
,number
etnull
) sont conservés.- Les valeurs de type
string
sont conservées exactement. - Les zéros de fin sont conservés. Le format de sortie des valeurs de type
number
n'utilise pas la notation scientifique.
- Les valeurs de type
Les valeurs
null
JSONB
sont traitées comme des valeurs SQL nonNULL
. Par exemple:SELECT null::jsonb IS NULL; -- Returns true SELECT 'null'::jsonb IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'a' IS NULL; -- Returns false SELECT '{"a":null}'::jsonb -> 'b' IS NULL; -- Returns true SELECT '{"a":null}'::jsonb -> 'a'; -- Returns a JSONB 'null' SELECT '{"a":null}'::jsonb -> 'b'; -- Returns a SQL NULL
L'ordre des éléments de tableau JSONB est conservé.
Restrictions
Les restrictions suivantes s'appliquent avec le fichier Spanner JSONB
:
- Les arguments de la fonction
to_jsonb
ne peuvent provenir que du groupe PostgreSQL compatibles avec Spanner. - Les valeurs de type numérique peuvent avoir 4 932 chiffres avant la virgule et 16 383 chiffres après la virgule.
- La taille maximale autorisée du format de stockage normalisé est de 10 Mo.
- Les documents
JSONB
doivent être encodés au format UTF-8. Transactions ou requêtes avecJSONB
les documents codés dans d'autres formats renvoient une erreur.
Créer une table avec des colonnes JSONB
Vous pouvez ajouter une colonne JSONB
à une table lorsque vous la créez.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
DateOpened TIMESTAMPTZ
);
Voici un exemple d'objet JSONB
VenueFeatures
:
{
"rating": 4.5,
"capacity":"1500",
"construction":"brick",
"tags": [
"multi-cuisine",
"open-seating",
"stage",
"public address system"
]
}
Ajouter et supprimer des colonnes JSONB dans les tables existantes
Vous pouvez ajouter une colonne JSONB
et la supprimer à l'aide des instructions ALTER
comme suit:
ALTER TABLE Venues ADD COLUMN VenueDetails JSONB;
ALTER TABLE Venues DROP COLUMN VenueDetails;
L'exemple suivant montre comment ajouter une colonne JSONB
appelée VenueDetails
pour
la table Venues
à l'aide des bibliothèques clientes Spanner.
C++
C#
Go
Java
Node.js
PHP
Python
<ph type="x-smartling-placeholder">
Ruby
Modifier les données JSONB
Vous pouvez modifier une colonne JSONB
comme n'importe quelle autre colonne.
Voici un exemple:
UPDATE Venues SET VenueFeatures = '{"rating": 4.5, "tags":["multi-cuisine", "open-seating"] }'
WHERE VenueId = 1;
L'exemple suivant montre comment mettre à jour des données JSONB
à l'aide des bibliothèques clientes Spanner.
C++
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 le service 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 le service 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 la page 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 le service 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 JSONB
Vous pouvez interroger les colonnes JSONB
en fonction des valeurs des champs sous-jacents. L'exemple suivant extrait VenueId
et VenueName
de Venues
, où VenueFeatures
a une valeur rating
supérieure à 3.5
.
SELECT VenueId, VenueName FROM Venues WHERE (VenueFeatures->>'rating')::FLOAT8 > 3.5;
L'exemple suivant montre comment interroger des données JSONB
à l'aide des bibliothèques clientes Spanner.
C++
Pour savoir comment installer et utiliser la bibliothèque cliente pour Spanner, consultez la page 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 la page 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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 le service 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 le service 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 la page Bibliothèques clientes Spanner.
Pour vous authentifier auprès de Spanner, configurez le service 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.
Fonctionnalités JSONB PostgreSQL non compatibles
Les fonctionnalités JSONB
PostgreSQL suivantes ne sont pas compatibles avec JSONB
Spanner :
- Tri, comparaison et agrégation
- PrimaryKey et ForeignKey
- Indexation, y compris l'index GIN Pour en savoir plus, consultez la section Indexation.
- Modifier une colonne
JSONB
pour l'affecter à tout autre type de données - Utiliser des requêtes paramétrées avec des paramètres JSONB non typés dans des outils qui utilisent le protocole filaire PostgreSQL
Contrainte dans le moteur de requêtes. Contrairement à PostgreSQL standard, la coercition de
JSONB
de texte n'est pas pris en charge. Seules les chaînesJSON
valides sont contraints de passer au typeJSONB
pour faire correspondre les signatures de fonction. Exemples :SELECT concat('abc'::text, '{"key1":1}'::jsonb); -- Returns error SELECT concat('abc'::text, CAST('{"key1":1}'::jsonb AS TEXT)); -- This works
Indexation
Les colonnes JSONB
ne sont pas compatibles avec l'indexation. Toutefois, vous pouvez créer un indice sur une colonne générée pour extraire une valeur scalaire d'une colonne JSONB
.
CREATE TABLE Venues (
VenueId BIGINT PRIMARY KEY,
VenueName VARCHAR(1024),
VenueAddress VARCHAR(1024),
VenueFeatures JSONB,
TotalCapacity BIGINT GENERATED ALWAYS AS ((VenueFeatures->>'capacity')::BIGINT) STORED,
DateOpened TIMESTAMPTZ
);
CREATE INDEX VenuesByCapacity ON Venues(TotalCapacity);