BigQuery временная функция для возврата структуры - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема с моей временной функцией JS, выполняемой в Bigquery.Эта функция возвращает массив массивов в коде JS, как в примере ниже.Какую STRUCT я должен использовать для сохранения каждого элемента массива в столбце таблицы?

Что возвращает функция:

   var items = [[1, 2],[3, 4],[5, 6]];

Используемая STRUCT:

RETURNS ARRAY<STRUCT<lat FLOAT64, lon FLOAT64>>

Код выглядит так:

CREATE TEMPORARY FUNCTION

kMeans(x ARRAY<FLOAT64>,  
       y ARRAY<FLOAT64>, 
       iterations FLOAT64,  -- the number of iterations
       k FLOAT64)           -- the number of clusters

 RETURNS ARRAY<STRUCT<lat FLOAT64 , lon FLOAT64>>

LANGUAGE js AS """
'use strict'
function sumOfSquareDiffs(oneVector, anotherVector) {
  // the sum of squares error //
...
...
...
    return [[1.0, 2.0],[3.0, 4.0],[5.0, 6.0]];
}
""";

SELECT kMeans(lat, lon, 50.0, 3.0) FROM `dataset.table`

Результат запроса

1 Ответ

0 голосов
/ 15 марта 2019

Проблема в том, что [[1.0, 2.0],[3.0, 4.0],[5.0, 6.0]] - это массив массивов, а не массив структур.Вот простой пример, который на самом деле возвращает некоторый результат;надеюсь, это поможет вам начать:

CREATE TEMPORARY FUNCTION

kMeans(x ARRAY<FLOAT64>,  
       y ARRAY<FLOAT64>, 
       iterations FLOAT64,  -- the number of iterations
       k FLOAT64)           -- the number of clusters

 RETURNS ARRAY<STRUCT<lat FLOAT64 , lon FLOAT64>>

LANGUAGE js AS """
'use strict'
function sumOfSquareDiffs(oneVector, anotherVector) {
  // the sum of squares error //
  return [{lat: 1.0, lon: 2.0},
          {lat: 3.0, lon: 4.0},
          {lat: 5.0, lon: 6.0}];
}

return sumOfSquareDiffs([1, 2], [3, 4]);
""";

SELECT kMeans([1.2], [3.4], 50.0, 3.0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...