web-dev-qa-db-fra.com

Mettre à jour ou supprimer des tables avec un tampon de streaming dans BigQuery?

J'obtiens l'erreur suivante lorsque j'essaie de supprimer des enregistrements d'une table créée via la console GCP et mise à jour avec la fonction d'insertion de table GCP BigQuery Node.js.

UPDATE or DELETE DML statements are not supported over table stackdriver-360-150317:my_dataset.users with streaming buffer

La table a été créée sans fonctionnalités de streaming. Et d'après ce que je lis dans la documentation Tables that have been written to recently via BigQuery Streaming (tabledata.insertall) cannot be modified using UPDATE or DELETE statements .

Cela signifie-t-il qu'une fois qu'un enregistrement a été inséré avec cette fonction dans une table, il n'y a aucun moyen de supprimer des enregistrements? Du tout? Si tel est le cas, cela signifie-t-il que la table doit être supprimée et recréée à partir de zéro? Si ce n'est pas le cas. Pouvez-vous suggérer une solution de contournement pour éviter ce problème?

Merci!

20
Diego

Pour vérifier si la table a un tampon de streaming, vérifiez le tables.get réponse pour une section nommée streamingBuffer ou, lors du streaming vers une table partitionnée, les données dans le tampon de streaming ont une valeur NULL pour le _PARTITIONTIME pseudo-colonne, donc même avec une simple requête WHERE peut être vérifiée.

Données en streaming est disponible pour une analyse en temps réel dans les quelques secondes suivant la première insertion en streaming dans une table mais cela peut prendre jusqu'à 90 minutes pour devenir disponible pour la copie/exportation et d'autres opérations. Vous devrez probablement attendre jusqu'à 90 minutes pour que tout le tampon soit conservé sur le cluster. Vous pouvez utiliser des requêtes pour voir si le tampon de streaming est vide ou pas comme vous l'avez mentionné.

Si vous utilisez le travail de chargement pour créer la table, vous n'aurez pas de tampon de diffusion en continu, mais vous y avez probablement diffusé des valeurs.

22
Pentium10

Assurez-vous de modifier vos filtres afin qu'ils n'incluent pas de données qui pourraient se trouver dans le tampon de streaming actuel.

Par exemple, cette requête échoue pendant que je diffuse vers cette table:

DELETE FROM `project.dataset.table` 
WHERE id LIKE '%-%'

Error: UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported

Vous pouvez le corriger en supprimant uniquement les enregistrements plus anciens:

DELETE FROM `project.dataset.table` 
WHERE id LIKE '%-%'
AND ts < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 40 MINUTE)

4282 rows affected.
5
Felipe Hoffa