Hive 当数据从oracle传输到配置单元时,合流格式会发生变化

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

我在使用confluent时遇到了一个问题,我创建了一个ID为增量列的jdbc源,以及一个HDFS接收器来将数据写入配置单元

在所有这些之后,我使用Hive来探索Hive中的数据,我可以看到的是,在Oracle中为“int”的ID列在Hive中变成了“binary”,而在Oracle中为“date”的时间列在Hive中变成了“timestamp”

以下是架构寄存器中的详细信息:

{
\"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
这是怎么发生的?我怎样才能解决这个问题?这是架构注册表的配置问题吗

致以最良好的祝愿


Feiran

Oracle日期类型包含日期和时间,无法将其转换为仅包含日期部分的配置单元日期。因此自动时间戳转换。AFAIK Oracle中没有INT类型;INTEGER只是数字(38)的别名,应该将其转换为配置单元BIGINT。我不知道为什么它是二进制的,这不是配置单元中数据类型的问题。如上所述,模式注册表中的数据(换句话说,kafka中的数据)已经从数字传输到字节[],从日期传输到时间戳。因此,这是AVRO中Oracle数据类型支持的问题。如果需要快速修复,只需将每个Oracle字段转换为Varchar2(ISO格式的日期等),然后再转换回HiveQL。