Есть ли способ очистить несколько таблиц одновременно? - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу очистить таблицы, хранящиеся в заданном c наборе данных bigquery.

На экране консоли нельзя удалить несколько таблиц одновременно.

Это также было невозможно удалить с помощью * в CL CL.

Есть ли способ очистить несколько таблиц одновременно?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Хотя в документации указано, что вы можете удалять только одну таблицу за раз, можно сделать запрос API со сценарием Python, чтобы удалить все таблицы внутри набор данных.

Я создал и протестировал следующий скрипт:

from google.cloud import bigquery

#construct BigQuery client object
client = bigquery.Client()

#select your dataset and list the tables within it 
dataset_id='test-proj-261014.demos'
tables = client.list_tables(dataset_id)  

#inititalizing the list of tables
list_tables=[]

for table in tables:
    #Create a list with the able reference for deletion 'project.dataset_id.table_id'
    id =".".join([table.project,table.dataset_id,table.table_id])
    list_tables.append(id)

    #List of tables
    print(list_tables)

#Delete all the tables inside the list of tables     
for table in list_tables:
    #print(table)
    client.delete_table(table)

print("{} {}".format("Number of deleted tables in the dataset:", len(list_tables)))

Я выполнил приведенный выше код, используя Jupyter Notebook с Python 3. Если вы запускаете его в среде облачной оболочки, сделайте обязательно установите все зависимости pip install --upgrade google-cloud-bigquery.

0 голосов
/ 28 апреля 2020

У меня была похожая ситуация, и я использовал следующий код Java для удаления большого числа таблиц.

Замените значения набора данных и table_prefix.

Установите учетную запись службы JSON файл ключа путь в качестве переменной среды GOOGLE_APPLICATION_CREDENTIALS.

Код:

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;

public class TableKiller {
    String dataset = "MY_DATASET";
    String table_prefix = "temp_table_";

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        new TableKiller().deleteAll();
    }

    public void deleteAll() throws InterruptedException, ExecutionException {
        ArrayList<String> tableNames = new ArrayList<>();
        BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService();
        int i = 1;

        bigQuery.listTables(dataset, BigQuery.TableListOption.pageSize(1000))
                .iterateAll()
                .forEach(table -> {
                    String tableName = table.getTableId().getTable();
                    if (tableName.startsWith(table_prefix)) {
                        tableNames.add(tableName);
                        System.out.println("Added " + tableName + i);
                    }
                });

        ForkJoinPool forkJoinPool = new ForkJoinPool(200);
        forkJoinPool.submit(() -> tableNames
                .parallelStream()
                .forEach(this::deleteTable)).get();

    }

    private void deleteTable(String tableName) {
        BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService();
        bigQuery.delete(TableId.of(dataset, tableName));
        System.out.println("Deleted " + tableName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...