Java 8+Groovy环境下BigQuery Writer替代插件及安装问题求助
可行的BigQuery替代集成方案(Groovy/Java 8环境)
你的依赖解析错误本质是Grails仓库无法正确返回Google的libraries-bom artifact(返回了HTML内容导致校验和不匹配),以下是无需依赖第三方Grails插件的替代方案:
方案1:直接使用Google Cloud BigQuery Java SDK
这是最稳定的官方方案,完全兼容Java 8和Groovy,无需依赖Grails插件。
步骤1:添加依赖
在你的build.gradle或BuildConfig.groovy中添加官方SDK依赖(选择兼容Java 8的版本):
// Gradle示例 dependencies { implementation 'com.google.cloud:google-cloud-bigquery:1.121.0' implementation platform('com.google.cloud:libraries-bom:26.3.0') } // 确保仓库配置包含Google和Maven Central,且优先级高于Grails仓库 repositories { mavenCentral() maven { url 'https://maven.google.com' } grailsCentral() }
步骤2:Groovy代码示例
直接用SDK实现数据写入逻辑,适配你的RabbitMQ出队后格式化流程:
import com.google.cloud.bigquery.BigQuery import com.google.cloud.bigquery.BigQueryOptions import com.google.cloud.bigquery.InsertAllRequest import com.google.cloud.bigquery.TableId // 初始化BigQuery客户端(推荐用环境变量或服务账号密钥配置权限) BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService() // 定义目标表信息 TableId tableId = TableId.of("你的项目ID", "数据集ID", "表名") // 格式化后的待写入数据(Map结构需与BigQuery表字段对应) def formattedData = [ id: 123, name: "测试数据", create_time: new Date() ] // 构建插入请求 InsertAllRequest.Builder builder = InsertAllRequest.newBuilder(tableId) builder.addRow(formattedData) InsertAllRequest insertRequest = builder.build() // 执行写入并处理结果 InsertAllResponse response = bigQuery.insertAll(insertRequest) if (response.hasErrors()) { response.getInsertErrors().each { entry -> println("写入失败,行${entry.key}: ${entry.value}") } } else { println("数据写入成功") }
方案2:自定义Groovy封装工具类
如果觉得SDK代码繁琐,可以封装轻量工具类简化重复操作:
class BigQueryWriter { private BigQuery bigQuery private TableId tableId BigQueryWriter(String projectId, String datasetId, String tableName) { this.bigQuery = BigQueryOptions.getDefaultInstance().getService() this.tableId = TableId.of(projectId, datasetId, tableName) } // 写入单条数据 boolean writeSingle(Map<String, Object> data) { def request = InsertAllRequest.newBuilder(tableId).addRow(data).build() def response = bigQuery.insertAll(request) return !response.hasErrors() } // 批量写入数据 boolean writeBatch(List<Map<String, Object>> dataList) { def builder = InsertAllRequest.newBuilder(tableId) dataList.each { builder.addRow(it) } def response = bigQuery.insertAll(builder.build()) return !response.hasErrors() } } // 使用示例 def writer = new BigQueryWriter("项目ID", "数据集ID", "表名") writer.writeSingle(formattedData)
可选:修复原插件的依赖问题
如果仍想尝试原插件,只需调整仓库优先级,确保Google相关依赖从正确仓库拉取:
// BuildConfig.groovy中调整仓库顺序 grails.project.dependency.resolution = { repositories { mavenCentral() maven { url "https://maven.google.com" } grailsCentral() // 其他仓库... } }
内容的提问来源于stack exchange,提问作者KeisGSmit
相关产品推荐
相关产品推荐

