You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Simba ODBC实现BigQuery间数据插入及Excel导入BigQuery?

一、通过Simba ODBC驱动在BigQuery间插入记录

直接借助ODBC连接执行BigQuery原生SQL即可完成跨表插入,步骤如下:

  1. 配置ODBC连接:确保Simba ODBC驱动已安装,通过ODBC数据源管理器配置BigQuery连接(填写项目ID、选择OAuth2等认证方式)。
  2. 执行插入SQL:
    • 若目标表已存在,直接插入数据:
      INSERT INTO `目标项目ID.目标数据集.目标表` (列名1, 列名2)
      SELECT 列名1, 列名2 FROM `源项目ID.源数据集.源表`
      WHERE 过滤条件;
      
    • 若目标表不存在,可直接创建并插入:
      CREATE TABLE `目标项目ID.目标数据集.目标表` AS
      SELECT 列名1, 列名2 FROM `源项目ID.源数据集.源表`
      WHERE 过滤条件;
      
  3. 注意事项:
    • 确保操作账号拥有源表读取权限和目标表写入权限
    • 源表与目标表的列数据类型需匹配(或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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:52:36