web-dev-qa-db-fra.com

Tronquer une table dans GBQ

J'essaie de tronquer une table existante dans GBQ mais la commande ci-dessous échoue lorsque je l'exécute. Existe-t-il une commande ou une syntaxe spécifique pour le faire? J'ai regardé dans la documentation GBQ mais pas de chance.

TRUNCATE TABLE [dw_test.test];
17
Teja

BigQuery ne prend pas en charge TRUNCATE dans le cadre d'une chaîne de requête. Le seul verbe DDL/DML pris en charge par BQ est SELECT.

Une option consiste à exécuter un travail avec WRITE_TRUNCATEécriture disposition (le lien est pour le paramètre de travail de requête, mais il est pris en charge sur tous les types de travaux avec une table de destination). Cela tronquera toutes les données déjà présentes dans le tableau et les remplacera par les résultats du travail.

Si vous ne souhaitez pas remplacer le contenu par d'autres données ou démarrer un travail, votre meilleure option est probablement de supprimer et de recréer la table avec le même schéma.

9
Danny Kitt

Bien que BigQuery n'ait pas pris en charge autre chose que SELECTs, il le fait maintenant tant que vous décochez "Utiliser Legacy SQL" dans les options de requête. Il n'y a pas de troncature, mais vous pouvez supprimer :

DELETE from my_table WHERE 1=1

Notez que BigQuery nécessite l'utilisation de WHERE dans le DELETE, donc si vous voulez supprimer tout ce dont vous avez besoin pour utiliser une déclaration qui sera toujours vraie.

CREATE OR REPLACE TABLE <dataset>.<table>
AS SELECT * FROM <dataset>.<table> LIMIT 0;

Pour les tables partitionnées, en supposant que vous ayez une partition de jour sur le champ "created_on", exécutez ensuite:

CREATE OR REPLACE TABLE <dataset>.<table> PARTITION BY created_on
AS SELECT * FROM <dataset>.<table> WHERE created_on = CURRENT_DATE() LIMIT 0;
9
Omar OLK