in src/parquet/arrow/arrow-reader-writer-test.cc [91:142]
LogicalType::type get_logical_type(const ::DataType& type) {
switch (type.id()) {
case ArrowId::UINT8:
return LogicalType::UINT_8;
case ArrowId::INT8:
return LogicalType::INT_8;
case ArrowId::UINT16:
return LogicalType::UINT_16;
case ArrowId::INT16:
return LogicalType::INT_16;
case ArrowId::UINT32:
return LogicalType::UINT_32;
case ArrowId::INT32:
return LogicalType::INT_32;
case ArrowId::UINT64:
return LogicalType::UINT_64;
case ArrowId::INT64:
return LogicalType::INT_64;
case ArrowId::STRING:
return LogicalType::UTF8;
case ArrowId::DATE32:
return LogicalType::DATE;
case ArrowId::DATE64:
return LogicalType::DATE;
case ArrowId::TIMESTAMP: {
const auto& ts_type = static_cast<const ::arrow::TimestampType&>(type);
switch (ts_type.unit()) {
case TimeUnit::MILLI:
return LogicalType::TIMESTAMP_MILLIS;
case TimeUnit::MICRO:
return LogicalType::TIMESTAMP_MICROS;
default:
DCHECK(false) << "Only MILLI and MICRO units supported for Arrow timestamps "
"with Parquet.";
}
}
case ArrowId::TIME32:
return LogicalType::TIME_MILLIS;
case ArrowId::TIME64:
return LogicalType::TIME_MICROS;
case ArrowId::DICTIONARY: {
const ::arrow::DictionaryType& dict_type =
static_cast<const ::arrow::DictionaryType&>(type);
return get_logical_type(*dict_type.dictionary()->type());
}
case ArrowId::DECIMAL:
return LogicalType::DECIMAL;
default:
break;
}
return LogicalType::NONE;
}