如何通过Simba ODBC实现BigQuery间数据插入及Excel导入BigQuery?
一、通过Simba ODBC驱动在BigQuery间插入记录
直接借助ODBC连接执行BigQuery原生SQL即可完成跨表插入,步骤如下:
- 配置ODBC连接:确保Simba ODBC驱动已安装,通过ODBC数据源管理器配置BigQuery连接(填写项目ID、选择OAuth2等认证方式)。
- 执行插入SQL:
- 若目标表已存在,直接插入数据:
INSERT INTO `目标项目ID.目标数据集.目标表` (列名1, 列名2) SELECT 列名1, 列名2 FROM `源项目ID.源数据集.源表` WHERE 过滤条件; - 若目标表不存在,可直接创建并插入:
CREATE TABLE `目标项目ID.目标数据集.目标表` AS SELECT 列名1, 列名2 FROM `源项目ID.源数据集.源表` WHERE 过滤条件;
- 若目标表已存在,直接插入数据:
- 注意事项:
- 确保操作账号拥有源表读取权限和目标表写入权限
- 源表与目标表的列数据类型需匹配(或BigQuery支持自动转换)
- 海量数据插入建议采用批量写入或分区表优化性能
二、VBA通过Simba ODBC驱动将Excel数据插入BigQuery
以下是可直接使用的VBA代码,包含连接配置、Excel数据读取及BigQuery插入逻辑:
Sub ExcelToBigQuery() Dim conn As Object Dim ws As Worksheet Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long Dim columnStr As String, valuesStr As String, batchValues As String Dim batchSize As Integer ' 配置参数 Set ws = ThisWorkbook.Worksheets("数据工作表") ' 替换为你的工作表名 batchSize = 500 ' 批量插入行数,优化大数量数据写入效率 ' 获取数据范围 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' 构建列名字符串(假设第一行为表头) columnStr = "" For j = 1 To lastCol columnStr = columnStr & "`" & ws.Cells(1, j).Value & "`," Next j columnStr = Left(columnStr, Len(columnStr) - 1) ' 初始化ODBC连接 Set conn = CreateObject("ADODB.Connection") ' 替换为你的DSN名称或完整连接字符串 conn.Open "DSN=BigQuery_Simba;OAuthType=0;ProjectId=你的项目ID;" ' 批量读取并插入数据 batchValues = "" For i = 2 To lastRow valuesStr = "" ' 处理单行列值 For j = 1 To lastCol Select Case VarType(ws.Cells(i, j).Value) Case vbString valuesStr = valuesStr & "'" & Replace(ws.Cells(i, j).Value, "'", "''") & "'," Case vbDate valuesStr = valuesStr & "'" & Format(ws.Cells(i, j).Value, "yyyy-MM-dd HH:mm:ss") & "'," Case vbInteger, vbLong, vbSingle, vbDouble valuesStr = valuesStr & ws.Cells(i, j).Value & "," Case Else valuesStr = valuesStr & "NULL," End Select Next j valuesStr = "(" & Left(valuesStr, Len(valuesStr) - 1) & ")," batchValues = batchValues & valuesStr ' 达到批量大小或最后一行时执行插入 If (i - 1) Mod batchSize = 0 Or i = lastRow Then batchValues = Left(batchValues, Len(batchValues) - 1) conn.Execute "INSERT INTO `你的项目ID.数据集ID.目标表` (" & columnStr & ") VALUES " & batchValues batchValues = "" End If Next i ' 清理资源 conn.Close Set conn = Nothing MsgBox "数据插入完成" End Sub
使用说明:
- 先确保Simba ODBC驱动已安装并配置好DSN(代码中DSN名称为
BigQuery_Simba,需替换为你的实际配置) - 替换代码中的项目ID、数据集ID、目标表名及工作表名
- 表头需与BigQuery表的列名完全匹配(BigQuery列名大小写敏感)
- 可根据数据量调整
batchSize参数,平衡写入效率与内存占用
内容的提问来源于stack exchange,提问作者mems
相关产品推荐
相关产品推荐

