Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery BigQuery是ETL的最佳方法(外部表和视图与数据流)_Google Bigquery_Google Cloud Platform_Google Cloud Storage_Etl_Google Cloud Dataflow - Fatal编程技术网

Google bigquery BigQuery是ETL的最佳方法(外部表和视图与数据流)

Google bigquery BigQuery是ETL的最佳方法(外部表和视图与数据流),google-bigquery,google-cloud-platform,google-cloud-storage,etl,google-cloud-dataflow,Google Bigquery,Google Cloud Platform,Google Cloud Storage,Etl,Google Cloud Dataflow,CSV文件每天被上传到某个FTP服务器(我没有SSH访问权限),我需要每周生成数据,将这些文件与转换合并。这些数据将进入BQ中的历史记录表和GCS中的CSV文件 我的做法如下: 创建一个Linux虚拟机并设置一个cron作业,该作业同步来自 带有GCS存储桶的FTP服务器(我正在使用GCSFS) 在BQ中为每个类别的CSV文件使用一个外部表 使用转换数据的复杂查询创建视图 使用另一个cron作业每周创建一个包含历史数据和CSV文件的表 我的想法是尽可能多地删除中间过程,并使实现尽可能简单,包

CSV文件每天被上传到某个FTP服务器(我没有SSH访问权限),我需要每周生成数据,将这些文件与转换合并。这些数据将进入BQ中的历史记录表和GCS中的CSV文件

我的做法如下:

  • 创建一个Linux虚拟机并设置一个cron作业,该作业同步来自
    带有GCS存储桶的FTP服务器(我正在使用GCSFS)
  • 在BQ中为每个类别的CSV文件使用一个外部表
  • 使用转换数据的复杂查询创建视图
  • 使用另一个cron作业每周创建一个包含历史数据和CSV文件的表
我的想法是尽可能多地删除中间过程,并使实现尽可能简单,包括ETL的数据流,但首先我有一些问题: 我的方法在效率和金钱方面有什么问题? 数据流能提供我的方法不能提供的东西吗? 有其他方法的想法吗


顺便说一句,我遇到了一个问题,可以通过自己解析csv文件而不是使用外部表来解决,这是无效字符,如空字符,因此我可以消除它们,而作为外部表,则存在解析错误。

以下是一些想法

如果您使用的数据量非常小,那么您的方法可能会很好。如果您正在处理更多数据,并且需要多个虚拟机,那么dataflow可以自动增加和减少管道使用的工作人员数量,以帮助管道更高效地运行并节省成本

另外,您的linux虚拟机是否一直在运行?还是只有在运行cron作业时才会启动?批处理数据流作业仅在需要时运行,这也有助于节省成本

在数据流中,您可以使用TextIO读取中的每一行文件,并添加自定义解析逻辑

您提到您有一个cron作业,它将文件放入GCS。数据流可以从地面军事系统读取,所以保持该过程并让您的数据流作业从地面军事系统读取可能是最简单的。否则,您将需要编写一个自定义源以从FTP服务器读取

以下是一些有用的链接:

谷歌数据流管道批处理执行作业可能会简化ETL。将您的文件上载到GCS存储桶。对于转换,请使用管道转换来剥离空值和无效字符(或任何您需要的字符)。在这些转换后的数据集上,使用复杂的查询,如按键分组、聚合(求和或合并),如果需要边输入,数据流还提供了将其他数据集合并到当前数据集的能力。最后,可以将转换后的输出写入BQ,也可以编写自己的自定义实现来编写这些结果

因此,数据流为您的解决方案提供了非常高的灵活性,您可以对管道进行分支,并使用相同的数据集在每个分支上进行不同的工作。关于成本,如果您使用三名工人运行批处理作业,这是默认情况,成本应该不会太高,但是如果您只想专注于业务逻辑,而不担心其他方面,那么google data flow非常有趣,如果使用得当,它将非常强大

数据流帮助您将所有内容都放在一块板上,并对其进行有效管理。检查一下它的定价,确定它是否最适合你(你的问题完全可以通过google data flow解决),你的方法不错,但需要对这些部分进行额外维护。
希望这能有所帮助。

在这种情况下,什么是数据量不是很低的呢?我喜欢联邦资源,因为它太简单了:),比如自动检测,等等,它似乎是正确的:p。。然而,空字符是一个让我相信我别无选择的问题。现在,对于数据流,我正在考虑创建一个逐文件管道模式(我只提供模式和模式作为参数)。然后我想我可以使用视图删除重复项