执行BigQuery ML.GENERATE_EMBEDDING时遇content列缺失错误求助
解决ML.GENERATE_EMBEDDING报错:缺少content列
错误原因
报错信息明确指出ML.GENERATE_EMBEDDING要求输入表必须包含名为content的STRING类型列,但你创建的image_object_table仅存储了GCS对象的元数据(uri、generation等),并没有这个关键列。
解决方法
修改查询语句,在传入ML.GENERATE_EMBEDDING前构造包含content列的子查询,通过FILE_CONTENTS读取GCS图片内容并转为BASE64字符串(满足STRING类型要求):
create or replace table `my_project_ID.my_dataset_ID.image_embeddings` as ( select *, regexp_extract(uri,r'[^/]+$') as obj_name, regexp_replace(regexp_extract(uri,r'[^/]+$'),r'\.jpg$','') as sku_id, '' as product_name from ML.GENERATE_EMBEDDING( MODEL `my_project_ID.my_dataset_ID.embedding_model`, ( SELECT uri, TO_BASE64(FILE_CONTENTS(uri)) AS content FROM `my_project_ID.my_dataset_ID.image_object_table` ) ) );
关键说明
FILE_CONTENTS(uri):从指定GCS uri读取图片的二进制内容,返回BYTES类型。TO_BASE64():将二进制内容转换为STRING类型的BASE64编码,完全符合ML.GENERATE_EMBEDDING对content列的类型要求。- 需确保BigQuery服务账号拥有目标GCS存储桶
my_images_bucket_ID的读取权限,否则FILE_CONTENTS会触发权限错误。
内容的提问来源于stack exchange,提问作者user3106820
相关产品推荐
相关产品推荐

