Google cloud platform 从拼花地板读取的梁/数据流不';我什么都没读,但我的工作还是成功的?

Google cloud platform 从拼花地板读取的梁/数据流不';我什么都没读,但我的工作还是成功的?,google-cloud-platform,google-cloud-dataflow,apache-beam,google-cloud-iam,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Google Cloud Iam,我有一个数据流作业,它: 从GCS读取包含其他文件名的文本文件 将文件名传递给ReadAllFromParquet以读取.parquet文件 写入BigQuery 尽管我的工作“成功”,但它基本上没有经过ReadAllFromParquet步骤的输出集合。 我成功地读取了列表中的文件,例如:['gs://my\u bucket/my\u file1.snappy.parquet'、'gs://my\u bucket/my\u file2.snappy.parquet'、'gs://my\u bu

我有一个数据流作业,它:

  • 从GCS读取包含其他文件名的文本文件
  • 将文件名传递给ReadAllFromParquet以读取.parquet文件
  • 写入BigQuery
  • 尽管我的工作“成功”,但它基本上没有经过ReadAllFromParquet步骤的输出集合。 我成功地读取了列表中的文件,例如:
    ['gs://my\u bucket/my\u file1.snappy.parquet'、'gs://my\u bucket/my\u file2.snappy.parquet'、'gs://my\u bucket/my\u file3.snappy.parquet'.
    我还在ReadAllFromParquet之前的步骤中使用记录器确认此列表正确,并且文件的GCS路径正确

    这就是我的管道看起来的样子(为了简洁起见,省略了完整的代码,但我相信它正常工作,因为我使用ReadAllFromText为.csv创建了完全相同的管道,并且工作正常):

    这就是我的工作图之后的样子:

    有人知道这里可能会出什么问题吗?最好的调试方法是什么? 我目前的想法是:

  • 存储桶权限问题。我注意到我正在阅读的文件桶很奇怪,因为之前我是一个项目的所有者,但无法下载文件。项目的所有者只有“存储遗留存储桶所有者”。我添加了“存储管理员”,然后用我自己的帐户手动下载文件时,它工作正常。根据数据流文档,我已经确保默认的计算服务帐户和数据流帐户在这个bucket上都有“Storage Admin”。然而,也许这只是一个转移视线的问题,因为如果最终出现权限问题,我应该在日志中看到这一点,作业就会失败

  • ReadAllFromParquet需要不同格式的文件模式吗?我已经展示了我上面提供的列表示例(在上面的图表中,我可以看到输入集合正确地显示了列表中48个文件的元素added=48)。我知道这种格式适用于ReadAllFromText,所以我认为它们是等效的,应该可以工作

  • =========

    编辑: 注意到其他潜在的后果。与我的另一份工作相比,我的工作使用ReadAllFromText,工作很好,我注意到在命名上有一点不匹配,这令人担忧

    这是我的工作作业的输出集合的名称:

    这是我拼花地板工作中的名字,实际上没有读到任何东西:

    特别注意

    Read all files/ReadAllFiles/ReadRange.out0
    
    vs

    路径的第一部分是两个作业的步骤名称。 但是我相信第二个是来自apache_beam.io.filebasedsource()的ReadAllFiles类,它同时调用ReadAllFromText和ReadAllFromParquet

    似乎是一个潜在的bug,但似乎无法在源代码中跟踪它

    ============= 编辑2

    经过进一步挖掘,ReadAllFromParquet似乎还没有发挥作用。ReadFromParquet调用apache_beam.io.parquetio.\u ParquetSource,而ReadAllFromParquet只调用
    apache_beam.io.filebasedsource._ReadRange


    如果这是一个实验函数,我想知道是否有办法打开它?

    您没有提到如果您使用的是最后一个Beam SDK,请尝试使用SDK 2.16测试最后的更改


    doc声明这是一个实验功能,也是从拼花地板读取的;尽管如此,如果报告为在此线程中工作,您可能希望尝试使用此功能。

    您没有提到如果您使用的是最后一个Beam SDK,请尝试使用SDK 2.16测试最后的更改


    doc声明这是一个实验功能,也是从拼花地板读取的;尽管如此,如果报告正在使用此线程,您可能希望尝试使用此功能。

    ReadFromParquet确实有效。ReadAllFromParquet目前只指向与ReadAllFromText相同的类,没有读取parquet的功能。您可以通过检查共享链接中的源代码来确认这一点。除非2.16有在源代码中看不到的更改?应该包含最后的修改,但您也可以检查其他版本。从我的回顾中,ReadAllFromParquet和ReadFromParquet这两个类都称为_ParquetSource,我想知道您是如何到达apache_beam.io.filebasedsource的。在您最初的问题中的注释“编辑2”中的ReadRange。无论如何,由于ReadFromParquet正在工作,我建议继续使用该功能。谢谢您的输入。我实际上是在看apache.org上托管的pydoc,但现在意识到这是2.11!幸运的是,我的工作目标发生了变化,所以我们不再需要那些拼花地板文件,所以现在干脆放弃这个。当我可以的时候,我一定会回来,就像我使用的2.15调用_ParquetSource一样。问题在我的代码中的其他地方。当然,如果你回来有新的结果,我会尽力帮助你。readfrom parquet确实有效。ReadAllFromParquet目前只指向与ReadAllFromText相同的类,没有读取parquet的功能。您可以通过检查共享链接中的源代码来确认这一点。除非2.16有在源代码中看不到的更改?应该包含最后的修改,但您也可以检查其他版本。从我的回顾中,ReadAllFromParquet和ReadFromParquet这两个类都称为_ParquetSource,我想知道您是如何到达apache_beam.io.filebasedsource的。在您最初的问题中的注释“编辑2”中的ReadRange。无论如何,由于ReadFromParquet正在工作,我建议继续使用该功能。谢谢您的输入。我实际上是在看apache.org上托管的pydoc,但现在意识到这是2.11!幸运的是,我的工作目标发生了变化,所以我们不再需要那些拼花地板文件,所以现在干脆放弃这个。当我可以的时候,我一定会回来,就像我使用的2.15调用_ParquetSource一样,这个问题在我的代码中的其他地方。当然,如果你来的话,我会尽力帮助你
    Read all files/ReadAllFiles/ReadRange.out0
    
    Read all files/Read all files/ReadRange.out0