使用外部 table 时检索文件名

Retrieve filename while using external table

我在使用 Synapse Analytics 从外部 table 执行 select 时尝试检索文件名。

我没有找到任何方法,但我在想 REJECT_ROW_LOCATION(当某些行被拒绝时)创建的文件包含拒绝某些行的文件的名称。

您对如何进行有任何想法吗?提前致谢

Polybase 可悲的是 没有 包括包含文件名的选项,我知道这会使调试大文件加载有点棘手。你有几个选择

  • 单个文件 - 如果您使用单个文件路径,文件名将始终在 CREATE EXTERNAL STATEMENT 命令的 LOCATION 部分可用。如果您使用的是通配符,那么至少路径是可用的,但不是完整的文件名
  • 在提取时将文件名添加到文件中 - 有点 hack,但如果您在提取时将文件名添加到源文件中,那么 Polybase 将可以提取它。如果您能很好地控制提取过程,这可能是一个很好的解决方案
  • COPY INTO 允许对列列表进行一些自定义并允许您添加默认值。不确定是否会允许整个虚拟列,需要检查
  • Synapse Pipeline $$FILEPATH 语法 - 在 Copy activity 中使用此语法添加文件名。请参阅 link 以获得一个很好的例子。
  • Spark input_file_name - 我们实际上使用 Synapse Notebooks 来加载我们的大量数据,并将 input_file_name 添加到数据框以提供文件名。这是一种不同的方法,因为它不是像 Polybase 这样的虚拟化层,但可以为我们解决问题。