Nouvelles limites de taille maximale pour les objets de la base de données (en attente)

Attention

Ce changement de comportement fait partie du bundle 2025_03.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Note

Ce changement de comportement a été introduit à l’origine dans le bundle 2025_02, mais a été déplacé dans le bundle 2025_03. Ce changement de comportement reste désactivé par défaut dans la version 2025_03.

Lorsque ce bundle de changements de comportement est activé, le stockage des objets de la base de données change comme suit :

Avant la modification:

Pour les colonnes des types suivants, la longueur maximale autorisée est 16 MB :

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

Pour les colonnes des types suivants, la longueur maximale autorisée est 8 MB :

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

Les instructions qui tentent de stocker des valeurs supérieures à ces longueurs maximales autorisées échouent.

Après la modification:

Pour les colonnes des types suivants, la longueur maximale autorisée est 128 MB :

  • VARCHAR

  • VARIANT

  • ARRAY

  • OBJECT

Pour les colonnes des types suivants, la longueur maximale autorisée est 64 MB :

  • BINARY

  • GEOGRAPHY

  • GEOMETRY

Les instructions qui tentent de stocker des valeurs jusqu’à ces nouvelles longueurs maximales autorisées réussissent. Les instructions qui tentent de stocker des valeurs supérieures à ces longueurs maximales autorisées échouent.

Pour les tables existantes et les tables créées après la modification, la longueur par défaut des colonnes de type VARIANT, ARRAY et OBJECT est de 128 MB, et la longueur par défaut des colonnes de type GEOGRAPHY et GEOMETRY est de 64 MB.

Toutefois, la longueur par défaut des colonnes de type VARCHAR et BINARY est respectivement de 16 MB et de 8 MB. Pour les colonnes de type VARCHAR, vous pouvez augmenter la longueur en la spécifiant explicitement lors de la création d’une nouvelle table ou de la modification d’une table existante. Pour les colonnes de type BINARY, vous pouvez augmenter la longueur en la spécifiant explicitement lors de la création d’une nouvelle table. Vous ne pouvez pas modifier la longueur d’une colonne BINARY dans une table existante.

Si une table a une nouvelle limite et stocke des objets dépassant 16 MB, toutes les tables en aval créées à l’aide de CREATE TABLE AS SELECT (CTAS) à partir de cette table échoueront. Pour éviter cet échec, ajustez l’instruction CTAS et définissez explicitement la taille de la colonne VARCHAR correspondante à 134217728 (67108864 pour BINARY).

Si le bundle 2025_03 est activé puis désactivé, les objets de la base de données dont les tables sont soumises à des limites de taille plus importantes restent accessibles. La prise en charge de la lecture des objets de grande taille a été introduite avec BCR-1779, qui est déjà activée pour tous les comptes et ne peut pas être désactivée.

Pour plus d’informations sur les nouvelles limites de taille, voir Limites de taille des objets de la base de données.

Les tailles supérieures à 16 MB sont visibles dans les résultats de la requête

Les tailles supérieures à 16 MB pour VARCHAR et 8 MB pour BINARY sont visibles dans les résultats de la requête. Par exemple, les tailles sont visibles dans les requêtes qui appellent la fonction SYSTEM$TYPEOF ou les requêtes de vues qui fournissent des informations sur les fonctions et les procédures (par exemple, le site INFORMATION_SCHEMA Vue FUNCTIONS).

L’exemple suivant concatène deux colonnes dont la taille est de 16 MB :

CREATE OR REPLACE TABLE test_larger_sizes(col1 VARCHAR, col2 VARCHAR) AS
  SELECT 'foo', 'bar';

SELECT SYSTEM$TYPEOF(CONCAT(col1, col2)) FROM test_larger_sizes;
Copy
+-----------------------------------+
| SYSTEM$TYPEOF(CONCAT(COL1, COL2)) |
|-----------------------------------|
| VARCHAR(33554432)[LOB]            |
+-----------------------------------+

Pour les fonctions et les procédures, les nouvelles tailles sont indiquées dans la vue INFORMATION_SCHEMA FUNCTIONS :

CREATE OR REPLACE FUNCTION test_larger_sized_func(in_arg VARCHAR)
  RETURNS VARCHAR
  LANGUAGE JAVASCRIPT
  CALLED ON NULL INPUT AS
$$
  RETURN NULL;
$$
;

SELECT data_type FROM INFORMATION_SCHEMA.FUNCTIONS
  WHERE function_name = 'TEST_LARGER_SIZED_FUNC';
Copy
+--------------------+
| DATA_TYPE          |
|--------------------|
| VARCHAR(134217728) |
+--------------------+

Modification du message d’erreur pour les tailles supérieures à 16 MB

Le message d’erreur peut changer pour certaines requêtes.

Voici un exemple d’insertion pour une colonne VARCHAR qui renvoie une erreur :

CREATE OR REPLACE TABLE test_larger_size_error(col VARCHAR);
INSERT INTO test_larger_size_error SELECT RANDSTR(20000000, 1);
Copy

Le message d’erreur suivant est renvoyé avant la modification :

100082 (22000): Max LOB size (16777216) exceeded, actual size of parsed column is 20000000

Le message d’erreur suivant est renvoyé après la modification :

100078 (22000): String
'CaFHJdoX3upWliCCdAPXXgytQuXzQpFO4laQEFdmiE1NDOywjwHoBqSNTCzTW66ynuR7EsI4ZxStCh3VMIBMYeHWgv1gUZRmHEK4kGmZcC02jGQhnnFJ0jtcIEWBIN6vKGkvSwG482IvfgVVwF3FTj7sb86t1SK9qigI6ujlSNByytIYBk0lkI1MM0zpRFeH2BNvGxtI.'
is too long and would be truncated

Pilotes pris en charge

Il se peut que vous deviez mettre à jour la version de votre pilote pour qu’elle prenne en charge des objets de base de données plus volumineux. Dans le cas contraire, une erreur similaire à la suivante peut être renvoyée :

100067 (54000): The data length in result column <column_name> is not supported by this version of the client.
Actual length <actual_size> exceeds supported length of 16777216.

Pour obtenir des informations sur les pilotes pris en charge, voir Versions du pilote prenant en charge les objets de grande taille dans le jeu de résultats.

Prise en charge Iceberg

Pour les tables Iceberg non gérées, la longueur par défaut des colonnes VARCHAR et BINARY est de 128 MB. Cette limite s’applique aux tables nouvellement créées ou actualisées. Les tables créées avant l’activation de la nouvelle limite de taille et non actualisées conservent l’ancienne limite de taille. Actualisez les tables existantes pour augmenter les limites de taille.

Pour les tables Iceberg gérées, la longueur par défaut des colonnes VARCHAR et BINARY est de 128 MB. Les tables créées avant l’activation de la nouvelle limite de taille conservent l’ancienne limite.

Pour appliquer la nouvelle taille aux colonnes de type VARCHAR dans ces tables, recréez les tables ou modifiez les colonnes. L’exemple suivant modifie une colonne pour utiliser la nouvelle limite de taille :

ALTER ICEBERG TABLE my_iceberg_table
  ALTER COLUMN col1 SET DATA TYPE VARCHAR(134217728);
Copy

Pour appliquer la nouvelle taille aux colonnes de type BINARY dans ces tables, recréez les tables. Vous ne pouvez pas modifier la longueur d’une colonne BINARY dans une table existante.

Réf : 1942