2017-01-10 3 views
0

Как рассчитать размер бита каждой записи в таблицах с таблицей BigQuery в течение определенного времени?Вычисление размера прокси-бит в таблице BigQuery

Цель: сколько он вырос в течение долгого времени

нюансы: Из 70 некоторых полей, некоторые записи будут иметь нулевые значения для большинства, некоторые записи будут иметь длинную строку текст схватился непосредственно из сырых бревен , и некоторые из них могут быть типами float/integer/date.

Удивительно, если есть простой способ сделать прокси-счетчик размера бит в течение одного дня, а затем я могу расширить его до определенного диапазона времени.

ответ

2

Пример по моему опыту:
Один из моих таблиц - ежедневный стол с ежедневным размером 4-5 ТБ. Схема имеет около 780 полей. Я хотел понять стоимость каждой точки данных (размер бита) [она использовалась тогда для расчета ROI на основе стоимости/использования]

Итак, позвольте мне дать вам представление о том, как стоимость (бит-размер) стороны к нему подошли.

Основная часть здесь является использование dryRun имущества Jobs: Query API

Установка dryRun к истине позволяет BigQuery (а на самом деле работает работа) статистика возвращения о работе, например, сколько байтов будут обработаны. И это именно то, что нужно здесь!

Так, например, ниже Request предназначен для получения стоимости trafficSource.referralPath в ga_session таблице 2017-01-05

POST https://www.googleapis.com/bigquery/v2/projects/yourBillingProject/queries?key={YOUR_API_KEY} 
{ 
"query": "SELECT trafficSource.referralPath FROM yourProject.yourDataset.ga_sessions_20170105`", 
"dryRun": true, 
"useLegacySql": false 
} 

Вы можете получить это значение путем анализа totalBytesProcessed из ответов. Смотрите пример такой реакции ниже

{ 
"kind": "bigquery#queryResponse", 
"jobReference": { 
"projectId": "yourBillingProject" 
}, 
"totalBytesProcessed": "371385", 
"jobComplete": true, 
"cacheHit": false 

}

Таким образом, вы можете написать относительно простой сценарий в клиенте по вашему выбору, что:

  1. читает схему вашего стола - вы можете использовать Tables: get API для этой или если схема известна и легко доступна, вы можете просто просто скопировать ее
  2. организовать цикл через все (каждое поле) в схеме
  3. внутри цикла - вызвать query api и извлечь размер соответствующего поданной (как указано выше)) и, конечно, зарегистрировать ее (или просто собрать его в памяти)

В результате выше - у вас будет список все поля с их соответствующим размером
Если теперь вам нужно проанализировать эти изменения размеров за время - вы можете обернуть выше с еще одним циклом, в котором вы будете проходить через столько дней, сколько вам нужно, и собирать статистику за каждый день

Если вас не интересует ежедневный анализ - вы можете просто убедиться, что ваш запрос действительно запрашивает интересующий вас диапазон.Это может быть сделано с использованием Wildcard Table

Я считаю это относительно легкий способ пойти с

меня лично, я помню, как делать это с Go-лана, но это не имеет значения - вы можете использовать любой клиент что вам больше всего нравится

Надеюсь, это вам поможет!

Смежные вопросы