Имя: Пароль:
1C
1С v8
Кто-нибудь работает с 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 их не показывает (показывает через несколько часов). Что бы посмотреть все данные нужно делать запрос...