如何查询扳手并获取元数据,尤其是列名?
how to query spanner and get metadata, especially columns' names?
我正在尝试在 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
) 仅在分析查询时可用。当您刚刚执行查询时,就像您在上面的示例中一样,这将始终为空。
我正在尝试在 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
) 仅在分析查询时可用。当您刚刚执行查询时,就像您在上面的示例中一样,这将始终为空。