我想开发一个直接将数据流传输到BigQuery表的应用程序引擎应用程序.
根据谷歌的文档,有一种简单的方法可以将数据流式传输到bigquery:
https://developers.google.com/bigquery/streaming-data-into-bigquery#streaminginsertexamples (注意:在上面的链接中你应该选择python选项卡而不是Java)
以下是有关如何编码流式插入的示例代码段:
body = {"rows":[
{"json": {"column_name":7.7,}}
]}
response = bigquery.tabledata().insertAll(
projectId=PROJECT_ID,
datasetId=DATASET_ID,
tableId=TABLE_ID,
body=body).execute()
Run Code Online (Sandbox Code Playgroud)
虽然我已经下载了客户端api,但我没有找到任何对上述Google示例中引用的"bigquery"模块/对象的引用.
应该找到bigquery对象(来自代码段)的位置?
任何人都可以展示更完整的方式来使用这个片段(使用正确的导入)?
我一直在寻找那么多,发现文档令人困惑和偏袒.
我目前正在编写一个软件,用于导出大量BigQuery数据并将查询结果作为CSV文件存储在本地.我使用Python 3和谷歌提供的客户端.我做了配置和验证,但问题是,我无法在本地存储数据.每次执行时,我都会收到以下错误消息:
googleapiclient.errors.HttpError:https://www.googleapis.com/bigquery/v2/projects/round-office-769/jobs ?alt = json返回"无效的提取目标URI"响应/文件名 - *.csv' .必须是有效的Google存储路径.">
这是我的工作配置:
def export_table(service, cloud_storage_path,
projectId, datasetId, tableId, sqlQuery,
export_format="CSV",
num_retries=5):
# Generate a unique job_id so retries
# don't accidentally duplicate export
job_data = {
'jobReference': {
'projectId': projectId,
'jobId': str(uuid.uuid4())
},
'configuration': {
'extract': {
'sourceTable': {
'projectId': projectId,
'datasetId': datasetId,
'tableId': tableId,
},
'destinationUris': ['response/file-name-*.csv'],
'destinationFormat': export_format
},
'query': {
'query': sqlQuery,
}
}
}
return service.jobs().insert(
projectId=projectId,
body=job_data).execute(num_retries=num_retries)
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用本地路径而不是云存储来存储数据,但我错了.
所以我的问题是:
我可以在本地(或本地数据库)下载查询数据,还是必须使用Google云端存储?
嗨,我正在研究我已集成BigQuery的Android应用程序.我看到有时在BigQuery表中插入记录时会遇到很多异常.我们不是这方面的专长,而是开始学习这项新技术.如果你们可以帮助我,那将是很棒的.
java.net.UnknownHostException: Unable to resolve host "accounts.google.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
at java.net.InetAddress.getAllByName(InetAddress.java:214)
at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:254)
at com.google.a.a.c.a.c.a(NetHttpRequest.java:77)
at com.google.a.a.c.r.p(HttpRequest.java:972)
at com.google.a.a.a.a.h.a(TokenRequest.java:307)
at com.google.a.a.b.a.a.b.f(GoogleCredential.java:384)
at com.google.a.a.a.a.c.h(Credential.java:489)
at com.google.a.a.a.a.c.a(Credential.java:217)
at com.google.a.a.c.r.p(HttpRequest.java:859)
at com.google.a.a.b.d.c.c(AbstractGoogleClientRequest.java:469)
at com.test.utils.c.c(CommonUtility.java:2730)
at com.test.services.AppInstallIntentService.onHandleIntent(AppInstallIntentService.java:71)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
at libcore.io.Posix.getaddrinfo(Posix.java)
at …Run Code Online (Sandbox Code Playgroud) java android google-api-java-client google-api-client google-bigquery
BigQuery是否支持该WITH条款?我不喜欢格式化太多的子查询.
例如:
WITH alias_1 AS (SELECT foo1 c FROM bar)
, alias_2 AS (SELECT foo2 c FROM bar a, alias_1 b WHERE b.c = a.c)
SELECT * FROM alias_2 a;
Run Code Online (Sandbox Code Playgroud) 我是Google BigQuery的新手.我需要有关查询错误的帮助:
"遇到""与""与""在第1行,第1列.期待:EOF"
with
t1 as
(
select
date(USEC_TO_TIMESTAMP(event_dim.timestamp_micros)) date, event_dim.name
from
[myfoody-1313:it_rawfish_myfoody_ANDROID.app_events_20160727]
where
event_dim.name='pv_detail' and event_dim.params.key='item_id' and
event_dim.params.value.string_value='31'
)
select
date(d) as day, count(event_dim.name)
from
generate_series(current_date - interval '6 day', current_date, '1 day') d
left join t1 on t1.date = d
group by day
order by day;
Run Code Online (Sandbox Code Playgroud) 我试图使用BigQuery的WebUI保存视图,这是在标准SQL方言中创建的,但我收到此错误:
保存视图失败.坏表引用"myDataset.myTable"; 标准SQL视图中的表引用需要显式项目ID
为什么会出现此错误?我该如何解决?"保存视图"对话框的"表ID"字段是否应包含项目ID?或者由于查询本身而出现此错误?以防万一,查询运行没有任何问题.
谢谢你的帮助.
我目前正在编写一个Java实用程序,用于将几个CSV文件从GCS导入BigQuery.我可以很容易地实现这一点bq load,但我想使用Dataflow作业来实现.所以我使用Dataflow的Pipeline和ParDo转换器(返回TableRow将它应用于BigQueryIO),我已经为转换创建了StringToRowConverter().这里实际问题开始了 - 我被迫为目标表指定模式,虽然我不想创建一个新表,如果它不存在 - 只是尝试加载数据.所以我不想手动设置TableRow的列名,因为我有大约600列.
public class StringToRowConverter extends DoFn<String, TableRow> {
private static Logger logger = LoggerFactory.getLogger(StringToRowConverter.class);
public void processElement(ProcessContext c) {
TableRow row = new TableRow();
row.set("DO NOT KNOW THE COLUMN NAME", c.element());
c.output(row);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,假设该表已存在于BigQuery数据集中,我不需要创建它,并且CSV文件也包含正确顺序的列.
如果此方案没有解决方法,并且数据加载需要列名,那么我可以将其放在CSV文件的第一行中.
任何帮助将不胜感激.
这个问题不是要解决特定的问题,而是要了解用于平整数组的通用SQL习语中幕后实际发生的情况。幕后有一些魔术,我想在语法糖的幕后窥视一下,看看发生了什么。
让我们考虑下表t1:
现在假设我们有一个函数调用FLATTEN了一个类型为array的列,并对该列中的每个数组进行解包,以便为每个数组中的每个值留一行-如果运行SELECT FLATTEN(numbers_array) AS flattened_numbers FROM t1,我们期望以下,我们称之为t2
在SQL中,CROSS JOIN通过将第一个表中的每一行与第二个表中的每一行进行组合来组合两个表中的行。所以如果我们跑步SELECT id, flattened.flattened_numbers from t1 CROSS JOIN flattened,我们得到
现在,flatten只是一个虚构的函数,您可以看到将其与CROSS JOIN结合起来并不是很有用,因为该id列的每个原始值都与flattened_numbers每个原始行混合在一起。因为我们没有一个WHERE子句只选择CROSS JOIN想要的行,所以一切都变得混乱了。
该模式中,人们实际上使用扁平化阵列看起来像这样:
SELECT id, flattened_numbers FROM t1 CROSS JOIN UNNEST(sequences.some_numbers) AS flattened_numbers,产生
但我不明白该CROSS JOIN UNNEST模式为何有效。因为CROSS JOIN不包含WHERE子句,所以我希望它的行为就像FLATTEN我上面概述的函数一样,其中每个未嵌套的值都与的每一行合并t1。
有人可以“解包” CROSS JOIN UNNEST模式中实际发生的情况吗,该模式可确保每行仅与其自身的嵌套值(而不与其他行的嵌套值)结合在一起?
是否在BigQuery上转储知识图谱API,还是可以通过BigQuery SQL语言查询知识图谱API?
Felipe在通过SQL 查询Freebase方面进行了精彩的讨论,但Freebase不再更新.
我是否有机会使用知识图谱API来完成Felippe对Freebase和Wikidata的处理?