【问题标题】:Creating table over written parquet file in Athena在 Athena 中创建覆盖写入镶木地板文件的表
【发布时间】:2018-05-11 18:25:03
【问题描述】:

我正在使用以下 python 脚本从 CSV 文件创建 parquet 文件:

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

csv_file = '~/Desktop/SWA_UK_Pickup_Forecast_HOURLY_M1_at_2017-11-28-04_20_21-UTC_from_28-Nov-2017_to_28-Nov-2017.csv'

chunksize = 10

csv_stream = pd.read_csv(csv_file, sep=',', chunksize=chunksize, low_memory=False)

for i, chunk in enumerate(csv_stream):
    if i == 0:
        parquet_schema = pa.Table.from_pandas(df=chunk).schema
        parquet_writer = pq.ParquetWriter('/Users/kohujwal/Desktop/parquet_forecast_file.parquet', parquet_schema, compression='snappy')
    table = pa.Table.from_pandas(chunk, schema=parquet_schema);
    parquet_writer.write_table(table)

parquet_writer.close();

然后我手动将其上传到某个 s3 位置,并在 Athena 中创建一个表。用于创建表的查询:

CREATE EXTERNAL TABLE IF NOT EXISTS forecast_report_lom_parquet (
  `forecast_week` int,
  `for_date` string,
  `forecast_day_of_week` string,
  `merchant_id` string,
  `shipper_account_id` string,
  `shipper_name` string,
  `node_id` string,
  `routing_preference` string,
  `forecast_shipment_count` int,
  `forecast_pallet_count` int,
  `forecast_volume` double )
STORED AS PARQUET
LOCATION 's3://prevoir-athena-input-prod/spike-computation/forecast-reports/parquet/live-order-model/'
tblproperties ("parquet.compress"="SNAPPY")

表创建成功,但是当我尝试查询表时,它不显示内容。它只显示行的索引和列名。这是CSVparquet file。拼花桌子上的查询:

SELECT * FROM prevoir_prod.forecast_report_lom_parquet

Results 我在控制台上看到的。

谁能指出这里出了什么问题?

【问题讨论】:

  • 我在分区表的情况下看到了这种行为。创建表 DDL 后,您需要运行: MSCK REPAIR TABLE forecast_report_lom_parquet ;我想知道“修复表”是否也可以帮助常规表? aws.amazon.com/premiumsupport/knowledge-center/…
  • 我遇到了同样的问题,运行MSCK REPAIR 并不能解决这个问题。

标签: python parquet amazon-athena pyarrow apache-arrow


【解决方案1】:

您的结果显示行号。这意味着 Athena 正在 S3 上查找文件,并将它们解析到识别行的位置。

Athena(或更准确地说,ParquetSerDe)似乎无法从您的文件中获取列。这表明CREATE EXTERNAL TABLE 语句与实际文件不匹配。一些可能性:

  1. 列名或数据类型错误
  2. 文件未按预期压缩(即尝试不压缩)

每当我有一个无法创建表的文件时,我都会使用 Glue 爬虫来检查和构建创建 DDL。效果很好,简单明了,并且省去了大量的反复试验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 2019-11-20
    • 1970-01-01
    • 2019-06-02
    • 2016-08-22
    • 2020-01-20
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多