Google cloud platform 将Airflow XCom作为JSON文件上载到Google云存储

Google cloud platform 将Airflow XCom作为JSON文件上载到Google云存储,google-cloud-platform,google-cloud-firestore,google-bigquery,google-cloud-storage,airflow,Google Cloud Platform,Google Cloud Firestore,Google Bigquery,Google Cloud Storage,Airflow,在Airflow中,我有一个XCom任务IDcustomer\u schema,我想将其转换为名为final\u schema.JSON的JSON文件,并上传到Google云存储中。我在谷歌云存储中的存储桶名为northern\u industrial\u customer。我尝试使用以下文件ToLoglecloudStorageOperator,但它不起作用 有人知道我是如何将我的XCom任务IDcustomer\u schema作为名为final\u schema.JSON的JSON文件传输

在Airflow中,我有一个XCom任务ID
customer\u schema
,我想将其转换为名为
final\u schema.JSON的JSON文件,并上传到Google云存储中。我在谷歌云存储中的存储桶名为
northern\u industrial\u customer
。我尝试使用以下
文件ToLoglecloudStorageOperator
,但它不起作用

有人知道我是如何将我的XCom任务ID
customer\u schema
作为名为
final\u schema.JSON
的JSON文件传输到Google云存储的吗


transfer\u to\u gcs=filetogologlecloudstorageoperator(task\u id='transfer\u to\u gcs',src=“{{task\u instance.xcom\u pull(task\u id='customer\u schema')}”,dst='final\u schema.json',bucket='northern\u industrial\u customer',google cloud storage\u conn\u id=conn\u id=conn\u gcs)
气流中没有操作员执行这些操作,但是Airflow是可扩展的,您可以编写自己的自定义操作符

导入临时文件
进口警告
从airflow.gcp.hooks.gcs导入GoogleCloudStorageHook
从airflow.models导入BaseOperator
从afflow.utils.decorators导入应用默认值
类ContentToLoglecloudStorageOperator(BaseOperator):
"""
将文本内容上传到谷歌云存储。
可以选择压缩内容以进行上载。
:param content:要上载的内容。(模板化)
:类型src:str
:param dst:指定存储桶内的目标路径,它必须是完整的文件路径
到GCS上的目标对象,包括GCS对象(例如`path/to/file.txt`)(模板化)
:类型dst:str
:param bucket:要上载到的bucket。(模板化)
:类型bucket:str
:param gcp_conn_id:(可选)用于连接到Google云平台的连接id。
:类型gcp\U连接id:str
:param mime_type:mime类型字符串
:type mime\u type:str
:param delegate_to:要模拟的帐户(如果有)
:键入委托给:str
:param gzip:允许将文件压缩并作为gzip上载
:类型gzip:bool
"""
模板_字段=('src','dst','bucket')
@应用默认值
定义初始化(自我,
内容,,
dst,
水桶
gcp_conn_id='google_cloud_default',
mime_type='application/octet stream',
委托给=无,
gzip=False,
*args,
**kwargs):
super()
self.content=内容
self.dst=dst
self.bucket=bucket
self.gcp\u conn\u id=gcp\u conn\u id
self.mime\u type=mime\u type
self.delegate\u to=委托给
self.gzip=gzip
def执行(自身、上下文):
"""
将文件上载到Google云存储
"""
钩子=谷歌钩子(
google_cloud_storage_conn_id=self.gcp_conn_id,
delegate\u to=self.delegate\u to
)
使用tempfile.NamedTemporaryFile(prefix=“gcs local”)作为文件:
file.write(self.content)
file.flush()文件
hook.upload(
bucket_name=self.bucket,
对象名称=self.dst,
mime\u type=self.mime\u type,
filename=file.name,
gzip=self.gzip,
)
transfer\u to\u gcs=contentToLoglecloudStorageOperator(
任务id='transfer_to_gcs',
content=“{task\u instance.xcom\u pull(task\u id='customer\u schema')}}”,
dst='final_schema.json',
bucket='北方工业客户',
gcp\U连接id=连接id\U gcs)

请注意,在Airflow 2.0中,文件ToGoLoglecloudStorageOperator中的
google_cloud_storage_conn_id
参数已停用。您应该使用gcp\u conn\u id

气流中没有操作员执行这些操作,但气流是可扩展的,您可以编写自己的自定义操作员

导入临时文件
进口警告
从airflow.gcp.hooks.gcs导入GoogleCloudStorageHook
从airflow.models导入BaseOperator
从afflow.utils.decorators导入应用默认值
类ContentToLoglecloudStorageOperator(BaseOperator):
"""
将文本内容上传到谷歌云存储。
可以选择压缩内容以进行上载。
:param content:要上载的内容。(模板化)
:类型src:str
:param dst:指定存储桶内的目标路径,它必须是完整的文件路径
到GCS上的目标对象,包括GCS对象(例如`path/to/file.txt`)(模板化)
:类型dst:str
:param bucket:要上载到的bucket。(模板化)
:类型bucket:str
:param gcp_conn_id:(可选)用于连接到Google云平台的连接id。
:类型gcp\U连接id:str
:param mime_type:mime类型字符串
:type mime\u type:str
:param delegate_to:要模拟的帐户(如果有)
:键入委托给:str
:param gzip:允许将文件压缩并作为gzip上载
:类型gzip:bool
"""
模板_字段=('src','dst','bucket')
@应用默认值
定义初始化(自我,
内容,,
dst,
水桶
gcp_conn_id='google_cloud_default',
mime_type='application/octet stream',
委托给=无,
gzip=False,
*args,
**kwargs):
super()
self.content=内容
self.dst=dst
self.bucket=bucket
self.gcp\u conn\u id=gcp\u conn\u id
self.mime\u type=mime\u type
self.delegate\u to=委托给
self.gzip=gzip
def执行(自身、上下文):
"""
将文件上载到Google云存储
"""
钩子=谷歌钩子(
google_cloud_storage_conn_id=self.gcp_conn_id,
delegate\u to=self.delegate\u to
)
使用临时文件