使用外部 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 这样的虚拟化层,但可以为我们解决问题。
我在使用 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 这样的虚拟化层,但可以为我们解决问题。