|
Кто-нибудь работает с google BigQuery? Нужен пример загрузки данных в таблицу | ☑ | ||
---|---|---|---|---|
0
zyto
16.08.16
✎
14:46
|
Кто-нибудь использует загрузку в BigQuery из 1С?
У меня получилось: 1. авторизоваться 2. попользовать любые методы получения данных - список таблиц, датасетов и т.д. 3. теоретически могу добавить данные в таблицу по одной строке но никак не пойму как загрузить несколько строк сразу, одним запросом. Не понимаю какая должна быть структура в теле запроса. (CSV / JSON - не важно, их я сформирую, что ещё нужно передавать помимо самих данных и в каком формате?) Мож кто поделится примерчиком? |
|||
1
Кирпич
16.08.16
✎
14:52
|
Щас узнаю, что это такое и напишу. Подожди.
|
|||
2
Кирпич
16.08.16
✎
14:57
|
вот это что ли? Loading CSV files?
https://cloud.google.com/bigquery/loading-data |
|||
3
Serginio1
16.08.16
✎
14:59
|
||||
4
Кирпич
16.08.16
✎
15:03
|
(3) да ему, видимо, на 1С нужен пример
|
|||
5
zyto
16.08.16
✎
15:04
|
(2)Да, и даже вот так:
https://cloud.google.com/bigquery/loading-data-post-request#examples Но там есть пара непонятных моментов: 1. 'fields': json.load(open(schema_path, 'r')) Что они передают в качестве schema_path и что получается в результате выполнения функции load - непонятно 2. они используют метод MediaFileUpload( data_path, mimetype='application/octet-stream')) Который явно недоступен в 1Ске, возможно надо данные передать текстом прям в теле запроса, но не понимаю в каком формате (3)это я всё умею, там загрузка в таблицу по одной строке + используются доп. библиотеки для .net, которые вряд-ли удастся использовать с 1С |
|||
6
zyto
16.08.16
✎
15:06
|
+(5)а грузить по одной строке - это значит на каждую строку отдельный HTTP запрос, таблица в какие-то жалкие сотню тысяч строк положит сетку :)
Ну или будет грузится вечно... |
|||
7
Serginio1
16.08.16
✎
15:07
|
||||
8
Кирпич
16.08.16
✎
15:07
|
(5) а там же чего то про commandline написано еще. может не париться и пользоваться ей?
|
|||
9
Serginio1
16.08.16
✎
15:09
|
Там заполнются строки на стороне клиента, а на сервер отправляются скопом
var r = new TableDataInsertAllRequest.RowsData(); r.InsertId = "RowOne"; r.Json = new Dictionary<string, object="">(); r.Json.Add("id", "ID1"); r.Json.Add("Created", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); d.Rows.Add(r); r = new TableDataInsertAllRequest.RowsData(); r.InsertId = "RowTwo"; r.Json = new Dictionary<string, object="">(); r.Json.Add("id", "ID2"); r.Json.Add("Created", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)); d.Rows.Add(r); var requestResponse = service.Tabledata.InsertAll(d, ProjectID, DataSet, TableName).Execute(); |
|||
10
zyto
16.08.16
✎
15:12
|
(8)там надо всякие google SDK ставить, и это работа через костыли.
Хотелось бы напрямую через HTTP (CSV или JSON - не важно), без использования внешних компонент. (7)я так не умею :) |
|||
11
Serginio1
16.08.16
✎
15:12
|
При этом библиотека используе NetStandart3 и можешь использовать хоть на линуксе
https://habrahabr.ru/post/304542/ https://habrahabr.ru/post/307188/ https://habrahabr.ru/post/307360/ |
|||
12
Serginio1
16.08.16
✎
15:14
|
(10) Все когда то бывает впервые. Ну если не получится через HTTP имей ввиду.
|
|||
13
Кирпич
16.08.16
✎
15:16
|
(10) ну можно через node.js еще попробовать.
|
|||
14
zyto
16.08.16
✎
15:16
|
Да должно получится через HTTP, нужно только определиться со структурой данных.
Там по сути 2 место где могут быть параметры - заголовки и тело запроса. С заголовками более-менее понятно, не понятно что в тело передавать. Просто таблицу недостаточно, т.к. в параметрах запроса нет указания в какую таблицу и датасет мы закачиваем данные, соответсвенно надо как-то эти параметры передать в теле запроса... |
|||
15
Кирпич
16.08.16
✎
15:17
|
+(13) если это у вас не считается внешней компонентой
(14) сниффером можно посмотреть чего передается. |
|||
16
zyto
16.08.16
✎
15:19
|
что бы смотреть сниффером нужен рабочий пример и рабочий сниффер :)
|
|||
17
Кирпич
16.08.16
✎
15:21
|
(16) рабочий пример node.js
рабочий сниффер в интернете |
|||
18
Serginio1
16.08.16
✎
15:23
|
Бери примеры https://developers.google.com/api-client-library/dotnet/get_started
и смотри фиддлером |
|||
19
zyto
16.08.16
✎
15:35
|
Ребята, спасибо за помощь, но вы отвечаете на свой вопрос и предлагаете использовать костыли вместо нормального решения.
Если всё-таки кто-то пользуется BigQuery - покажите, что вы передаёте в теле запроса. |
|||
20
Кирпич
16.08.16
✎
15:41
|
(19) какие нафиг костыли? тебе предлагают посмотреть сниффером.
"Если всё-таки кто-то пользуется BigQuery" да никто им не пользуется. сто лет он кому нужен. |
|||
21
zyto
16.08.16
✎
15:46
|
Кажется (9) был прав, таким образом:
https://cloud.google.com/bigquery/docs/reference/v2/tabledata/insertAll можно передать сразу несколько строк... Похоже это то что нужно, сейчас буду пробовать без снифферов и куртизанок :) |
|||
22
zyto
16.08.16
✎
16:34
|
Хм... Странная фигня, запрос выполняется, ошибок нет, а данные в таблице не появляются
|
|||
23
zyto
18.08.16
✎
11:32
|
На всякий случай, для потомков, тело сообщения должно быть примерно таким:
{"rows": [{"json":{ "field1":"aaa", "field2":"bbb"} }, {"json":{ "field1":"ccc", "field2":"eee"} } ] } где field1 и field2 - это имена (айдишники) полей в созданной таблице, ну а проект, датасет и имя таблицы мы передаём в URLе. PS Данные появляются в таблице сразу после выгрузки, но Preview их не показывает (показывает через несколько часов). Что бы посмотреть все данные нужно делать запрос... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |