Hive 当数据从oracle传输到配置单元时,合流格式会发生变化
我在使用confluent时遇到了一个问题,我创建了一个ID为增量列的jdbc源,以及一个HDFS接收器来将数据写入配置单元 在所有这些之后,我使用Hive来探索Hive中的数据,我可以看到的是,在Oracle中为“int”的ID列在Hive中变成了“binary”,而在Oracle中为“date”的时间列在Hive中变成了“timestamp” 以下是架构寄存器中的详细信息:Hive 当数据从oracle传输到配置单元时,合流格式会发生变化,hive,schema,avro,apache-kafka-connect,confluent-platform,Hive,Schema,Avro,Apache Kafka Connect,Confluent Platform,我在使用confluent时遇到了一个问题,我创建了一个ID为增量列的jdbc源,以及一个HDFS接收器来将数据写入配置单元 在所有这些之后,我使用Hive来探索Hive中的数据,我可以看到的是,在Oracle中为“int”的ID列在Hive中变成了“binary”,而在Oracle中为“date”的时间列在Hive中变成了“timestamp” 以下是架构寄存器中的详细信息: { \"type\": \"record\", \"name\": \"GAYS_KAKOUXINXI\", \"fi
{
\"type\": \"record\",
\"name\": \"GAYS_KAKOUXINXI\",
\"fields\": [
{
\"name\": \"ID\",
\"type\": [
\"null\",
{
\"type\": \"bytes\",
\"connect.version\": 1,
\"connect.parameters\": {
\"scale\": \"0\"
},
\"connect.name\": \"org.apache.kafka.connect.data.Decimal\"
}
]
},
{
\"name\": \"DEP_ACTION_FLAG\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"SBMC\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"FXMC\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"FXLX\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"DD\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"KKJD\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"DEP_ACTION_TIME\",
\"type\": [
\"null\",
{
\"type\": \"long\",
\"connect.version\": 1,
\"connect.name\": \"org.apache.kafka.connect.data.Timestamp\"
}
]
},
{
\"name\": \"KKMC\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"GCSJ\",
\"type\": [
\"null\",
\"string\"
]
},
{
\"name\": \"CSYS\",
\"type\": [
\"null\",
\"string\"
]
}
],
\"connect.name\": \"GAYS_KAKOUXINXI\"
}
以下是我的schema-registry.properties:
listeners=http://0.0.0.0:18081
kafkastore.connection.url=localhost:2171
kafkastore.topic=_schemas
debug=false
这是我的connect-avro-distributed.properties:
bootstrap.servers=localhost:9092
group.id=connect-cluster
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
config.storage.topic=connect-configs
offset.storage.topic=connect-offsets
status.storage.topic=connect-statuses
producer.interceptor.classes=io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor
consumer.interceptor.classes=io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor
这是怎么发生的?我怎样才能解决这个问题?这是架构注册表的配置问题吗
致以最良好的祝愿
FeiranOracle日期类型包含日期和时间,无法将其转换为仅包含日期部分的配置单元日期。因此自动时间戳转换。AFAIK Oracle中没有INT类型;INTEGER只是数字(38)的别名,应该将其转换为配置单元BIGINT。我不知道为什么它是二进制的,这不是配置单元中数据类型的问题。如上所述,模式注册表中的数据(换句话说,kafka中的数据)已经从数字传输到字节[],从日期传输到时间戳。因此,这是AVRO中Oracle数据类型支持的问题。如果需要快速修复,只需将每个Oracle字段转换为Varchar2(ISO格式的日期等),然后再转换回HiveQL。