gpt4 book ai didi

python - 如何查询spanner并获取元数据,特别是列的名称?

转载 作者:行者123 更新时间:2023-12-01 00:40:09 25 4
gpt4 key购买 nike

我正在尝试在 Spanner 上查询自定义 SQL 并将结果转换为 Pandas Dataframe,因此我需要数据和列名称,但我找不到获取列名称的方法。

根据documentation ,我可以使用元数据或字段属性获取列,但这不起作用。

我尝试运行查询事务并获取快照,但我只获取数据行。


from google.cloud import spanner
from google.cloud.spanner_v1.streamed import StreamedResultSet

def query_transaction(instance_id, database_id, query_param):

spanner_client = spanner.Client.from_service_account_json("PATH_XXXXX")
database = spanner_client.instance(instance_id).database(database_id)

def run_transaction(transaction):
query = query_param
results: StreamedResultSet = transaction.execute_sql(query)
print("type", type(results))
print("metadata", results.stats)
for row in results:
print(row)

database.run_in_transaction(run_transaction)

def query_snapshot(instance_id, database_id, query):

spanner_client = spanner.Client.from_service_account_json("PATH_XXXXX")
database = spanner_client.instance(instance_id).database(database_id)

with database.snapshot() as snapshot:
results: StreamedResultSet = snapshot.execute_sql(query)

print("metadata", results.metadata)
print("type", type(results))

for row in results:
print(row)


spanner_id = "XXXXXXX"
base_id = "XXXXXXXX"
query ="SELECT * FROM XXXXX LIMIT 5"

spanner.query_snapshot(spanner_id, base_id, query)
spanner.query_transaction(spanner_id, base_id, query)


我可以迭代结果并获取行,但元数据始终为 None。

最佳答案

在元数据可用之前,您必须至少获取一行。因此,如果您要更改代码的顺序,以便首先获取数据(或至少一些数据),然后获取元数据,那么它应该可以工作。

results: StreamedResultSet = snapshot.execute_sql(query)
print("metadata", results.metadata)
for row in results:
print(row)

进入此:

results: StreamedResultSet = snapshot.execute_sql(query)
for row in results:
print(row)
print("metadata", results.metadata)

那么您应该获取元数据。

另请注意,结果集统计信息 (results.stats) 仅在您分析查询时可用。当您刚刚执行查询时,如上面的示例所示,这将始终为空。

关于python - 如何查询spanner并获取元数据,特别是列的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com