我正在编写一个Google Apps脚本,将数据从Mysql数据库发送到大型查询表。
我知道如何查询mysql数据库。我知道如何将csv文件或Google sheets中的数据写入Big query。但是,我希望能够将mysql查询结果直接发送到BigQuery。我该怎么做呢?
基本上,我的SQL结果存储在一个变量中:
var results = stmt.executeQuery('select * from table');
该表非常基础:
Col1 Col2 Col3
String 1 foo1 1
String 2 foo2 2
String 3 foo3 3
etc... etc... etc...在大型查询端脚本中,我有以下内容:
var data = results.getBlob().setContentType('application/octet-stream');
显然,在运行我的脚本时,我有以下错误:
Cannot find function getBlob in object
我真的不知道如何访问results变量中的数据,也不知道如何将它们格式化为可读格式以执行下面的.getBlob().setContentType('application/octet-stream')
到目前为止,我已经尝试通过使用以下循环的push方法在名为rawdata的新变量中传递results值:
while (results.next()) {
var rowString = '';
for (var col = 0; col < numCols; col++) {
rowString += results.getString(col + 1) + '\t';
}
Logger.log(rowString);
rawdata.push(rowString)
}然而,rawdata.getBlob().setContentType('application/octet-stream');返回给我同样的错误。
我不知道如何格式化我的原始数据或结果变量。
发布于 2019-06-14 22:17:08
问题:
getBlob从字符串/数组中获取blob,而这两种类型都没有可用的方法。\t创建csv。解决方案:
代码片段:
var rawdata = [];
while (results.next()) {
var rowString = '';
for (var col = 0; col < numCols; col++) {
rowString += '"' + results.getString(col + 1) + '",';//quotes " if present in results data, must be replaced with double quotes ""
}
rawdata.push(rowString.slice(0, -1))
}
var data = Utilities.newBlob(rawdata.join('\n'),'application/octet-stream');参考文献:
https://stackoverflow.com/questions/56598628
复制相似问题