BigQuery, как определить массив как поле программно? - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь запустить проект хранилища данных, вот как я хотел бы, чтобы моя схема выглядела следующим образом:

таблица: схема события-журнала:

 -> info
    -> user_id: "xyz"
    -> user_properties // <- I want this to be array like
       -> 0
          -> key: "name
          -> value
             -> int_value: null
             -> string_value: "osp"
             ...
       -> 1 // and it goes on

Проблема в том, что я нене знаю, как программно определить этот массив как структуру.

Я взял идею отсюда:

https://www.youtube.com/watch?v=pxNrkjBeHpw

вот мой код (kotlin с использованием java googleоблачная библиотека) пока:

    val tableId = TableId.of(datasetName, tableName)

    // First part, general field
    val generalInfoFields = ArrayList<Field>()
    generalInfoFields.add(Field.of("user_id", LegacySQLTypeName.STRING))


    generalInfoFields.add(Field.of("user_properties", {ARRAY LIKE TYPE??}))

    val general_info = Field.of("general_info", LegacySQLTypeName.RECORD, FieldList.of(generalInfoFields))


    // Combine fields and create table
    val tableSchema = Schema.of(general_info)
    val tableDefinition = StandardTableDefinition.of(tableSchema)
    val tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build()
    val table = bigquery.create(tableInfo)



    log.info("dataset created " + dataset.datasetId.dataset)

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 06 июня 2018

Для определения массива в схеме BigQuery необходимо использовать модификатор Field.Mode.REPEATED.Отметьте официальные документы .

Ваш код будет выглядеть примерно так:

val arrayField = Field.newBuilder("user_properties", LegacySQLTypeName.RECORD, FieldList.of(<record nested fields here>))
        .setMode(Field.Mode.REPEATED).build()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...