将其他文件包括在数据流中 [英] include other files with dataflow

查看:0
本文介绍了将其他文件包括在数据流中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据流使用.sql文件。此文件包含一个查询,它位于名为queries的目录中。

我需要将此文件与我的数据流一起上载。

我发现使用的是清单.in文件,但据我所知,这并不起任何作用,我在根目录中创建了名为MANIFEST.in的文件,它只包含一行:

recursive-include queries *

其他一些来源告诉我,为此需要使用setup.py文件。所以现在它看起来是这样的:

from __future__ import absolute_import
from __future__ import print_function

import subprocess
from distutils.command.build import build as _build

import setuptools  # pylint: disable-all
setuptools.setup(
    name='MarkPackage',
    version='0.0.1',
    install_requires=[],
    packages=setuptools.find_packages(),
    package_data={
        'queries': ['queries/*'],
    },
    include_package_data=True
)

这也不起作用。 错误为:RuntimeError: FileNotFoundError: [Errno 2] No such file or directory: 'queries/testquery.sql' [while running 'generatedPtransform-20']

在数据流的任何部分或所有部分中包含要使用的任何文件的最佳做法是什么?

推荐答案

这个解决方案是由我们的Google Cloud顾问向我介绍的。它是有效的,但建议不要这样做,因为它仅仅是为了将SQL查询与Python代码分离而增加了复杂性。 另一种方法是在包含此SQL代码的BigQuery上创建一个视图,并在BigQuery环境中维护它。

MANIFEST.in
include query.sql

setup.py

import setuptools
setuptools.setup(
    name="example",
    version="0.0.1",
    install_requires=[],
    packages=setuptools.find_packages(),
    data_files=[(".", ["query.sql"])],
    include_package_data=True,
)

main.py

with open ("query.sql", "r") as myfile:
        query=myfile.read()
    with beam.Pipeline(argv=pipeline_args) as p:
        rows = p | "ReadFromBQ" >> beam.io.Read(
            beam.io.BigQuerySource(query=query, use_standard_sql=True)
        )
        rows | "writeToBQ" >> beam.io.Write(
            "BQ Write"
            >> beam.io.WriteToBigQuery(
                known_args.output_table,
                create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
                write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
            )
        )

这篇关于将其他文件包括在数据流中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆