You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级composer-2.1.0-airflow-2.3.4后GCSToBigQueryOperator无法读取GCS数据

问题诊断与修复方案

核心问题定位

从错误日志来看,存在两个关键异常:

  1. API返回Unknown output format: media::读取Schema文件时的API调用参数异常
  2. GCS对象未找到:No such object: [BUCKET_HIDDEN]/data/creditsafe/CD01/txt/*.txt:通配符路径匹配失败,或Schema文件路径错误

结合环境升级背景,主要排查以下几个方向:


1. 修正Schema文件路径(最可能的根源)

代码中schema_object参数使用的是本地DAG目录路径f"dags/schema/creditsafe/{data_type}.json",但GCSToBigQueryOperator要求schema_object必须是GCS存储桶中的对象路径,而非Composer本地DAG目录路径。旧版本Airflow可能兼容本地读取,但升级后依赖的google-cloud-bigquery库严格要求从GCS加载Schema文件。

修复步骤:

  • 将Schema文件上传到目标GCS存储桶(可复用任务使用的os.environ["GCS_BUCKET"])
  • 修改schema_object参数为GCS内的路径:
    # 示例:Schema文件上传到GCS的schema/creditsafe/目录下
    schema_object = f"schema/creditsafe/{data_type}.json"
    # 若Schema在其他桶,需写完整GS路径:
    # schema_object = f"gs://your-schema-bucket/schema/creditsafe/{data_type}.json"
    

2. 检查source_objects通配符的正确性

错误日志显示系统尝试直接获取*.txt字面对象,而非解析通配符,可能是以下原因:

  • file_names变量格式错误,未正确传递通配符路径
  • 升级后google-cloud-storage库对通配符的解析逻辑变化

验证与修复:

  • 确认file_names的值是类似data/creditsafe/CD01/txt/*.txt的字符串(或包含正确通配符的列表)
  • 若使用列表传递多路径,确保每个条目格式正确,例如:
    # 单个通配符路径
    file_names = "data/creditsafe/CD01/txt/*.txt"
    # 或多个具体文件路径
    file_names = ["data/creditsafe/CD01/txt/file1.txt", "data/creditsafe/CD01/txt/file2.txt"]
    
  • 若通配符仍失效,尝试用prefix参数替代,指定文件前缀:
    gcs_to_bq = GCSToBigQueryOperator(
        # ...其他参数
        prefix="data/creditsafe/CD01/txt/",
        # 移除source_objects参数
        # ...其他参数
    )
    

3. 确认依赖库版本兼容性

Composer 2.1.0搭配的apache-airflow-providers-google版本若过低,可能与Airflow 2.3.4存在兼容性问题。

验证步骤:

  • 在Composer环境的PyPI依赖中,确认apache-airflow-providers-google版本≥8.0.0(适配Airflow 2.3.x的推荐版本)
  • 若版本不足,通过命令更新依赖:
    gcloud composer environments update YOUR_ENV_NAME \
      --location YOUR_LOCATION \
      --update-pypi-packages apache-airflow-providers-google==8.10.0
    

4. 权限与路径快速验证

  • 确认google_cloud_default连接拥有GCS存储桶的storage.objects.get权限
  • 用gsutil验证通配符路径是否能匹配到文件:
    gsutil ls gs://[BUCKET_HIDDEN]/data/creditsafe/CD01/txt/*.txt
    
    若命令返回空,说明路径或文件确实不存在;若返回文件列表,则排除路径问题。

内容的提问来源于stack exchange,提问作者David Kane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:45:32