Google Cloud datalab 查询 BIgQuery 表时出错
Google Cloud datalab error querying BIgQuery tables
我想我在这里遗漏了一些基本的东西,似乎无法弄清楚它是什么..
正在从 Google 云数据实验室查询分区 table 的 BigQuery 日期。大多数其他查询都按预期获取数据,不确定为什么在这个特定的 table、select 中不起作用,但是 count(1) 查询有效。
%%sql
select * from Mydataset.sample_sales_yearly_part limit 10
我遇到以下错误:
KeyErrorTraceback (most recent call last) /usr/local/lib/python2.7/dist-packages/IPython/core/formatters.pyc in
__call__(self, obj)
305 pass
306 else:
--> 307 return printer(obj)
308 # Finally look for special method names
309 method = get_real_method(obj, self.print_method)
/usr/local/lib/python2.7/dist-packages/datalab/bigquery/commands/_bigquery.pyc in _repr_html_query_results_table(results)
999 1000 def _repr_html_query_results_table(results):
-> 1001 return _table_viewer(results) 1002 1003
/usr/local/lib/python2.7/dist-packages/datalab/bigquery/commands/_bigquery.pyc in _table_viewer(table, rows_per_page, fields)
969 meta_time = ''
970
--> 971 data, total_count = datalab.utils.commands.get_data(table, fields, first_row=0, count=rows_per_page)
972
973 if total_count < 0:
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in get_data(source, fields, env, first_row, count, schema)
226 return _get_data_from_table(source.results(), fields, first_row, count, schema)
227 elif isinstance(source, datalab.bigquery.Table):
--> 228 return _get_data_from_table(source, fields, first_row, count, schema)
229 else:
230 raise Exception("Cannot chart %s; unsupported object type" % source)
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in _get_data_from_table(source, fields, first_row, count, schema)
174 gen = source.range(first_row, count) if count >= 0 else source
175 rows = [{'c': [{'v': row[c]} if c in row else {} for c in fields]} for row in gen]
--> 176 return {'cols': _get_cols(fields, schema), 'rows': rows}, source.length
177
178
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in _get_cols(fields, schema)
108 if schema:
109 f = schema[col]
--> 110 cols.append({'id': f.name, 'label': f.name, 'type': typemap[f.data_type]})
111 else:
112 # This will only happen if we had no rows to infer a schema from, so the type
KeyError: u'DATE'
QueryResultsTable job_Ckq91E5HuI8GAMPteXKeHYWMwMo
您可能遇到了刚刚在 https://github.com/googledatalab/pydatalab/pull/68 中修复的问题(但尚未包含在 Datalab 版本中)。
背景是 BigQuery 中新的 "Standard SQL" 支持添加了可以显示在结果架构中的新数据类型,而 Datalab 尚未更新以处理这些类型。
Datalab 的下一个版本应该会解决此问题,但与此同时,您可以通过将日期字段包装在显式转换为 TIMESTAMP 中作为查询的一部分来解决此问题。
例如,如果您在以下代码单元格中看到该错误:
%%sql SELECT COUNT(*) as count, d FROM <mytable>
(其中 'd' 是类型 'DATE' 的字段),那么您可以通过将该字段转换为 TIMESTAMP 来解决此问题,如下所示:
%%sql SELECT COUNT(*) as count, TIMESTAMP(d) FROM <mytable>
对于您的特定查询,您必须将“*”更改为字段列表,以便您可以将带有日期的查询转换为时间戳。
我想我在这里遗漏了一些基本的东西,似乎无法弄清楚它是什么..
正在从 Google 云数据实验室查询分区 table 的 BigQuery 日期。大多数其他查询都按预期获取数据,不确定为什么在这个特定的 table、select 中不起作用,但是 count(1) 查询有效。
%%sql
select * from Mydataset.sample_sales_yearly_part limit 10
我遇到以下错误:
KeyErrorTraceback (most recent call last) /usr/local/lib/python2.7/dist-packages/IPython/core/formatters.pyc in
__call__(self, obj)
305 pass
306 else:
--> 307 return printer(obj)
308 # Finally look for special method names
309 method = get_real_method(obj, self.print_method)
/usr/local/lib/python2.7/dist-packages/datalab/bigquery/commands/_bigquery.pyc in _repr_html_query_results_table(results)
999 1000 def _repr_html_query_results_table(results):
-> 1001 return _table_viewer(results) 1002 1003
/usr/local/lib/python2.7/dist-packages/datalab/bigquery/commands/_bigquery.pyc in _table_viewer(table, rows_per_page, fields)
969 meta_time = ''
970
--> 971 data, total_count = datalab.utils.commands.get_data(table, fields, first_row=0, count=rows_per_page)
972
973 if total_count < 0:
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in get_data(source, fields, env, first_row, count, schema)
226 return _get_data_from_table(source.results(), fields, first_row, count, schema)
227 elif isinstance(source, datalab.bigquery.Table):
--> 228 return _get_data_from_table(source, fields, first_row, count, schema)
229 else:
230 raise Exception("Cannot chart %s; unsupported object type" % source)
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in _get_data_from_table(source, fields, first_row, count, schema)
174 gen = source.range(first_row, count) if count >= 0 else source
175 rows = [{'c': [{'v': row[c]} if c in row else {} for c in fields]} for row in gen]
--> 176 return {'cols': _get_cols(fields, schema), 'rows': rows}, source.length
177
178
/usr/local/lib/python2.7/dist-packages/datalab/utils/commands/_utils.pyc in _get_cols(fields, schema)
108 if schema:
109 f = schema[col]
--> 110 cols.append({'id': f.name, 'label': f.name, 'type': typemap[f.data_type]})
111 else:
112 # This will only happen if we had no rows to infer a schema from, so the type
KeyError: u'DATE'
QueryResultsTable job_Ckq91E5HuI8GAMPteXKeHYWMwMo
您可能遇到了刚刚在 https://github.com/googledatalab/pydatalab/pull/68 中修复的问题(但尚未包含在 Datalab 版本中)。
背景是 BigQuery 中新的 "Standard SQL" 支持添加了可以显示在结果架构中的新数据类型,而 Datalab 尚未更新以处理这些类型。
Datalab 的下一个版本应该会解决此问题,但与此同时,您可以通过将日期字段包装在显式转换为 TIMESTAMP 中作为查询的一部分来解决此问题。
例如,如果您在以下代码单元格中看到该错误:
%%sql SELECT COUNT(*) as count, d FROM <mytable>
(其中 'd' 是类型 'DATE' 的字段),那么您可以通过将该字段转换为 TIMESTAMP 来解决此问题,如下所示:
%%sql SELECT COUNT(*) as count, TIMESTAMP(d) FROM <mytable>
对于您的特定查询,您必须将“*”更改为字段列表,以便您可以将带有日期的查询转换为时间戳。