У меня есть данные avro, которые имеют столбец с меткой времени в один столбец, и теперь я пытаюсь создать внешнюю таблицу кустов поверх файлов avro. Данные сохраняются в avro до тех пор, пока я ожидаю, что тип avro logic обработает обратное преобразование для отметки времени, когда я запрашиваю таблицу улья. Но этого не происходит при простом возврате длинного значения. Как я могу заставить это работать должным образом?
PS: Я использую Spark 2.3 и databricks com.databrospark-avro_2.11
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>4.0.0</version>
</dependency>
ШАГ1: Сохраните значение временной метки в avro
val startTs=java.sql.Timestamp.valueOf("2020-05-11 14:17:57.188")
val df=Seq(startTs).toDF
df.write.avro("/test")
val avroDf=spark.read.avro("/test")
avroDf.show(false)
+-------------+
|value |
+-------------+
|1589221077188|
+-------------+
AVSC file generated using avro-tools from the avro data files
test.avsc
{
"type" : "record",
"name" : "topLevelRecord",
"fields" : [ {
"name" : "value",
"type" : "long", "logicalType": "timestamp-millis"
} ]
}
hdfs dfs -copyFromLocal -f test.avsc /tmp/test.avsc
ШАГ 2: СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ УЛОВА для данных AVRO
DROP TABLE IF EXISTS test_a;
CREATE EXTERNAL TABLE test_a
STORED AS AVRO
LOCATION '/tenants/gwm/idr/tmp/test'
TBLPROPERTIES ('avro.schema.url'='/tmp/test.avsc');
msck repair table test_a;
select * from test_a;
+----------------+--+
| test_a.value |
+----------------+--+
| 1589221077188 |
+----------------+--+
Вместо этого длинного значения я пытаюсь получить метку времени значение.