Java 如何使用s3 select从拼花文件中获取所有列的列表?

Java 如何使用s3 select从拼花文件中获取所有列的列表?,java,sql,amazon-s3,parquet,amazon-s3-select,Java,Sql,Amazon S3,Parquet,Amazon S3 Select,我有一个拼花文件存储在S3桶中。我想得到拼花地板文件中所有列的列表。我使用的是s3select,但它只给我列出了所有没有列标题的行 是否有任何方法可以在不完全下载的情况下从这个拼花文件中获取所有列名?因为拼花文件可能非常大,所以我不想下载整个拼花文件,这就是为什么我使用s3select来使用 select * from S3Object LIMIT 10 我试图通过执行以下操作显式获取列名 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS W

我有一个拼花文件存储在S3桶中。我想得到拼花地板文件中所有列的列表。我使用的是
s3select
,但它只给我列出了所有没有列标题的行

是否有任何方法可以在不完全下载的情况下从这个拼花文件中获取所有列名?因为拼花文件可能非常大,所以我不想下载整个拼花文件,这就是为什么我使用
s3select
来使用

select * from S3Object LIMIT 10
我试图通过执行以下操作显式获取列名

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'S3Object'
但是它不起作用,因为AWSS3还不支持这一点


还有其他方法可以达到同样的效果吗?

我也有同样的问题,但不幸的是,这次我的谷歌功夫不够强大

我发现了以下我不太喜欢但对我有效的解决方法:

r=s3.选择对象内容(Bucket=“…您的Bucket…”,
Key=“…您的密钥…”,
ExpressionType='SQL',
Expression=“从S3对象的限制1中选择s*”,
InputSerialization={'Parquet':{},
OutputSerialization={'JSON':{})
row=json.loads([rec['Records']['Payload'].decode('utf-8')用于r['Payload']中的rec,如果rec中的'Records'][0])
打印(“列:”,列表(row.keys())
也就是说,代码所做的是请求第一行数据,提取有效负载并加载返回的JSON对象。获取的JSON对象具有以下结构
{“Column name”:“value”、..}
,因此只需提取JSON对象的键(最后一行)

另一个问题是,这不会返回列的类型。这是我还不能解决的问题

更新:
我观察到,在某些情况下,有些列名称不正确。返回的不是像_18之类的真名,而是_19。不知道如何处理。

您可以使用aws s3选择功能实现拼花地板选择。对于java的使用,这里是链接。这就是我正在做的。如果我使用拼花文件,它本身不会返回标题。