Экспорт BigQuery в файл CSV через SQL - PullRequest
1 голос
/ 15 мая 2019

Я хочу создать файл CSV, который содержит результаты запроса.Этот CSV-файл будет храниться в облачном хранилище Google.(Этот запрос составляет около 15 ГБ) Мне нужно, чтобы это был один файл.Возможно ли это, если да, то как?

CREATE OR REPLACE TABLE `your-project.your-dataset.chicago_taxitrips_mod` AS (
WITH
  taxitrips AS (
  SELECT
    trip_start_timestamp,
    trip_end_timestamp,
    trip_seconds,
    trip_miles,
    pickup_census_tract,
    dropoff_census_tract,
    pickup_community_area,
    dropoff_community_area,
    fare,
    tolls,
    extras,
    trip_total,
    payment_type,
    company,
    pickup_longitude,
    pickup_latitude,
    dropoff_longitude,
    dropoff_latitude,
    IF((tips/fare >= 0.2),
      1,
      0) AS tip_bin
  FROM
    `bigquery-public-data.chicago_taxi_trips.taxi_trips`
  WHERE
    trip_miles > 0
    AND fare > 0)
SELECT
  trip_start_timestamp,
  trip_end_timestamp,
  trip_seconds,
  trip_miles,
  pickup_census_tract,
  dropoff_census_tract,
  pickup_community_area,
  dropoff_community_area,
  fare,
  tolls,
  extras,
  trip_total,
  payment_type,
  company,
  tip_bin,
  ST_AsText(ST_SnapToGrid(ST_GeogPoint(pickup_longitude,
        pickup_latitude), 0.1)) AS pickup_grid,
  ST_AsText(ST_SnapToGrid(ST_GeogPoint(dropoff_longitude,
        dropoff_latitude), 0.1)) AS dropoff_grid,
  ST_Distance(ST_GeogPoint(pickup_longitude,
      pickup_latitude),
    ST_GeogPoint(dropoff_longitude,
      dropoff_latitude)) AS euclidean,
  CONCAT(ST_AsText(ST_SnapToGrid(ST_GeogPoint(pickup_longitude,
          pickup_latitude), 0.1)), ST_AsText(ST_SnapToGrid(ST_GeogPoint(dropoff_longitude,
          dropoff_latitude), 0.1))) AS loc_cross
FROM
  taxitrips
LIMIT
  100000000
  )

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Экспорт 15 ГБ в один файл CSV невозможен (возможно несколько файлов).Я попытался выполнить тот же запрос (в байтах обработано 15,66 ГБ), а затем попытался экспортировать его в файл CSV в GCS, но не смог с этой ошибкой

Таблица gs: // [my_bucket] /bq_export/test.csvслишком велик для экспорта в один файл.Укажите URI, включая * для экспорта.См. «Экспорт данных в один или несколько файлов» в https://cloud.google.com/bigquery/docs/exporting-data.

BQ Documentation позволяет экспортировать только 1 ГБ табличных данных в один файл.Поскольку размер таблицы превышает 1 ГБ, необходимо использовать подстановочный знак, например:

gs: //your-bucket-name/csvfilename*.csv

enter image description here

Не уверен, почему вы хотите, чтобы экспортный CSV-файл был в одном файле, но ИМХО он слишком велик, чтобы быть в одном файле.запись его в несколько файлов будет намного быстрее, поскольку BQ будет использовать свой параллелизм для записи вывода с использованием нескольких потоков.

1 голос
/ 15 мая 2019

Если BigQuery необходимо вывести несколько файлов, вы можете затем объединить их в один с помощью операции gsutil для файлов в GCS:

gsutil compose gs://bucket/obj1 [gs://bucket/obj2 ...] gs://bucket/composite

Обратите внимание, что существует ограничение (в настоящее время 32) на количество компонентов, которые могут быть объединены в одной операции.

...