您可以使用 python/boto3 来完成。
定义bucket_name和前缀:
colsep = ','
s3 = boto3.client('s3')
bucket_name = 'my-data-test'
s3_key = 'in/file.parquet'
请注意,S3 SELECT 一次只能访问一个文件。
现在你可以打开 S3 SELECT 光标了:
sql_stmt = """SELECT count(*) FROM s3object S"""
req_fact =s3.select_object_content(
Bucket = bucket_name,
Key = s3_key,
ExpressionType = 'SQL',
Expression = sql_stmt,
InputSerialization={'Parquet': {}},
OutputSerialization = {'CSV': {
'RecordDelimiter': os.linesep,
'FieldDelimiter': colsep}},
)
现在遍历返回的记录:
for event in req_fact['Payload']:
if 'Records' in event:
rr=event['Records']['Payload'].decode('utf-8')
for i, rec in enumerate(rr.split(linesep)):
if rec:
row=rec.split(colsep)
if row:
print('File line count:', row[0])
如果您想计算给定 S3 目录中所有 parquet 文件中的记录,请查看此 python/boto3 脚本:S3-parquet-files-row-counter