我正在使用此查询来获取我已暂存的文件之一。我不知道该文件包含多少列,并且希望查询所有列并能够查看列的名称。
我在做
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
谢谢!
无法简单地“选择 *”并返回舞台上给定文件的所有列。
假设您的数据是 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 数据。
选择 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;