我从python代码中运行BQ作业,该代码首先为带有特定标签和描述的结果在BQ中创建一个空表。稍后在BQ中,我将结果插入到那个空表中。唯一的问题是,我不能使用ALTER将列添加到没有模式的表中。之前我不能添加模式,因为SQL查询是由Python代码动态创建的。解决这个问题的唯一方法是使用一个名为'x‘的列创建表,然后在SQL查询结束时删除它。
下面是代码外观的一个概念:
CREATE TEMP FUNCTION
... very_complicated_function ...;
CREATE TEMP TABLE features AS
... very_clever_code ...;
ALTER TABLE `table.created.by_python`
ADD COLUMN IF NOT EXISTS key INT64,
ADD COLUMN IF NOT EXISTS feature1 INT64;
ALTER TABLE `table.created.by_python` DROP COLUMN x;
INSERT INTO `table.created.by_python`
SELECT * except(nearest_centroids_distance)
from
ML.PREDICT(MODEL `brilliant.genius.amazing`,
(SELECT * FROM features)) M
最好的方法是将数据插入空表,如果不存在,让它自己创建模式。
发布于 2022-03-24 20:41:42
可以通过以下方式将空列添加到现有表中:
下面是一些您可以尝试使用的python代码,看看它对您的情况是否有帮助。
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set table_id to the ID of the table
# to add an empty column.
# table_id = "your-project.your_dataset.your_table_name"
table = client.get_table(table_id) # Make an API request.
original_schema = table.schema
new_schema = original_schema[:] # Creates a copy of the schema.
new_schema.append(bigquery.SchemaField("phone", "STRING"))
table.schema = new_schema
table = client.update_table(table, ["schema"]) # Make an API request.
if len(table.schema) == len(original_schema) + 1 == len(new_schema):
print("A new column has been added.")
else:
print("The column has not been added.")
另外,这里有一些文档可以帮助您将新列实现到表中。
https://stackoverflow.com/questions/71605728
复制相似问题