尝试从暂存文件 Snowflake 中查询所有列及其名称

问题描述 投票:0回答:2

我正在使用此查询来获取我已暂存的文件之一。我不知道该文件包含多少列,并且希望查询所有列并能够查看列的名称。

我在做

SELECT a.$1, a.$2, a.$3, a.$4
FROM @my_stage (FILE_FORMAT=>'my_format',PATTERN=>'my_file_path') a;

给出名称为 $1、$2 等的列及其值。由于我不知道这个原始文件中存在多少列,因此我必须不断向 select 语句添加 a.$5、a.$6 等,直到不再显示任何列。有没有一种方法可以一次查询所有列以及列名是什么?我尝试使用

SELECT *
但收到错误消息
SQL compilation error: error line 1 at position 0 SELECT with no columns
谢谢!

sql file compilation snowflake-cloud-data-platform querying
2个回答
0
投票

无法简单地“选择 *”并返回舞台上给定文件的所有列。

假设您的数据是 CSV 格式且没有标题,您甚至无法返回“列名称”,因为没有可用的名称。

但是,如果文件中的第一行包含每列的名称(例如,从 Excel 中提取,其中第一行包含每列的名称),那么您可以简单地使用以下方式查询:

SELECT a.$1, a.$2, a.$3, a.$4
FROM @my_stage (FILE_FORMAT=>'my_format',PATTERN=>'my_file_path') a;

文件中的第一行表示列名称。

在不知道列名称的情况下获取列详细信息的一种方法:

在该文件上创建一个外部表。 这将以 VARIANT 格式返回数据 - 您可以简单地查询外部表。 当然,如果您的第一行包含列标题,则这仅适用于 CSV 数据。


0
投票

选择 t.* from table(infer_schema(location=>'@your_database_name.your_schema_name.your_stage_name', file_format=>'your_database_name.your_schema_name.your_file_format_name')) as t 订购依据 t.order_id asc;

© www.soinside.com 2019 - 2024. All rights reserved.