一个用于与 Google Cloud BigQuery 交互的 Swift 实现,设计为服务器优先的解决方案。
此软件包的愿景是提供一种高级但仍具有高性能的方式,以便从 Swift 与 BigQuery 进行交互。这使用了 Swift 原生功能,如 Codable
和严格的并发性。
是的,就这些。这是一个早期的开发中软件包。欢迎通过创建 issue 或 pull request 来贡献。
struct Row: Decodable {
let someField: String
}
try await withBigQuery { bigQuery in
let result = try await bigQuery.query(
"SELECT someField FROM `my_dataset.my_table`",
as: Row.self
)
// result.rows contains rows returned from BigQuery
}
也支持使用字符串插值来参数化查询。例如
struct SomeRecord: Encodable {
let key: String
let value: Int
}
let tableName = "my_table"
let id = "123"
let record = SomeRecord(key: "someKey", value: 123)
let array = [true, false]
let query: Query = """
INSERT INTO `my_dataset.\(unsafe: tableName)` ( -- Must use unsafe-argument to skip paramatirization
id,
someRecordField,
someArrayField
) VALUES (
\(id), -- This will encode as type STRING
\(someRecordField), -- This will encode as type STRUCT<key: STRING, value: INT64>
\(array) -- This will encode as type ARRAY<BOOL>
)
"""
try await bigQuery.query(query)
批量写入是一个强大的功能,允许你在单个流中写入多行。该流以安全的方式处理重试和按序交付。数据在所有行都已发送到 BigQuery 后才会被提交。
struct Row: Encodable {
let id: Int
let name: String
}
try await bigQuery.batchWrite(datasetID: "my_dataset", tableID: "my_table") { stream in
try await stream.write(rows: [
Row(id: 1, name: "John"),
Row(id: 2, name: "Jane"),
])
}
有一些集成测试需要设置服务帐户。在运行 swift test
之前,设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量以指向服务帐户 JSON 文件。如果未设置,则将跳过集成测试。服务帐户需要能够执行作业,并有权访问名为 my_dataset.my_table
的数据集和表。
MIT 许可证。有关详细信息,请参阅 LICENSE。
欢迎贡献!请随时提交 Pull Request。