让Bigquery自动检测架构

时间:2016-04-17 01:08:46

标签: google-bigquery

我正在尝试加载csv文件并让BigQuery自动创建架构。

bq load --source_format CSV -F '\t'  --skip_leading_rows=1 voterdb.voters gs://[[ redacted bucket ]]/extract.csv
BigQuery error in load operation: Error processing job 'tokyo-unity-87516:bqjob_r3682474e46ce720f_0000015421aee065_1': No schema specified on job or table.

根据https://cloud.google.com/bigquery/federated-data-sources自动创建/推断支持架构。

4 个答案:

答案 0 :(得分:4)

bq load --source_format=NEWLINE_DELIMITED_JSON --autodetect yourdataset.yourtable inputfile.json 标志可能就是你想要的。它适用于CSV和(换行符分隔的)JSON输入文件。

例如......

Sub MarkComplete()

'Select first cell
Range("G2").Select

'Loop until no more values
While ActiveCell.Value <> ""

    'Print appropriate value
    If ActiveCell.Value = "Complete" Then

        ActiveCell.Value = "Y"

    Else

        ActiveCell.Value = "N"

    End If

    'Move to next cell
    ActiveCell.Offset(1, 0).Select

Wend

End Sub

请参阅此处的文档:https://cloud.google.com/bigquery/bq-command-line-tool#creatingtablefromfile

请注意,这与联合数据源无关。

答案 1 :(得分:3)

如前一个答案中所述,模式自动检测是联合数据源查询的一部分。 CSV and JSON schema auto-detection标题下未明确说明这不适用于bq load。如果您认为文档中不清楚这一点,我强烈建议您点击该文档页面右上角的 发送反馈 ,并详细说明这种歧义。

对于bq load命令,根据bq load documentation,表模式是必需参数。省略它会导致您遇到错误消息。

修改 感谢polleyg的更新。在this blog post中,宣布也应该在加载时检测模式。如Chris Sears所述,--autodetect旗帜应符合您的需求。

答案 2 :(得分:1)

您引用的每个链接 - 当您直接query联合数据源时,BigQuery支持自动创建/推断架构。
您收到的错误来自GCS的load

答案 3 :(得分:1)

这是节点js的解决方案。

<v-menu ref="menu3" :close-on-content-click="false" v-model="anniversaryVisibility" :nudge-right="10" :return-value.sync="enquiryForm.anniversary"
     lazy
     transition="scale-transition"
     offset-y
      full-width
      min-width="290px">

     <v-text-field 
    slot="activator" 
    v-model="enquiryForm.anniversary" 
    label="Anniversary" 
    append-icon="event" 
    outline 
    readonly
    :error-messages="fieldErrors('enquiryForm.anniversary')"
    @input="$v.enquiryForm.anniversary.$touch()"
    @blur="$v.enquiryForm.anniversary.$touch()"
    >
    </v-text-field>

<v-date-picker v-model="enquiryForm.anniversary" @input="$refs.menu3.save(enquiryForm.anniversary)"></v-date-picker>

</v-menu>