首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Cassandra异常timeuuid

Java Cassandra异常timeuuid
EN

Stack Overflow用户
提问于 2018-04-06 20:54:39
回答 2查看 627关注 0票数 1

在java中,我在插入cassandra时遇到这个错误,我还尝试了timestamp数据类型,

那么问题日期是类型,还是java代码?你能建议修改代码吗?

正在读取csv文件。

错误:

代码语言:javascript
复制
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Invalid STRING constant (2012/11/11) for "fl_date" of type timeuuid

结构: fl_date timeuuid,

代码:

代码语言:javascript
复制
    System.out.println("Processing CSV file ...");
    List<Flight> flightList = ProcessFlightsCSV.processFlights("flights_from_pg.csv");

    for (Flight flight : flightList) {

        System.out.println(flight);

        Insert query = QueryBuilder.insertInto("flights")
                .value("id", flight.getId())
                .value("year", flight.getYear())
                .value("fl_date", flight.getFlDate())
                .value("airline_id", flight.getAirlineId())
                .value("carrier", flight.getCarrier())
                .value("fl_num", flight.getFlNum())
                .value("origin_airport_id", flight.getOriginAirportId())
                .value("origin", flight.getOrigin())
                .value("origin_city_name", flight.getOriginCityName())
                .value("origin_state_abr", flight.getOriginStateAbr())
                .value("dest", flight.getDest())
                .value("day_of_month", flight.getDayOfMonth())
                .value("dest_city_name", flight.getDestCityName())
                .value("dest_state_abr", flight.getDestStateAbr())
                .value("dep_time", flight.getDepTime())
                .value("arr_time", flight.getArrTime())
                .value("distance", flight.getDistance())
                ;

        session.execute(query.toString());
    }
}
}
EN

回答 2

Stack Overflow用户

发布于 2018-04-09 19:17:07

在Cassandra中没有直接的方法可以将字符串-日期-时间转换为TimeUUID。所以你需要从date-time值中生成timeuuid。下面是一个简单的例子:

代码语言:javascript
复制
    long fl_date_in_mili = // some code to get millisecond time from flight.getFlDate(); DO it yourself, As we don't know what kind of datatype it is.
    ...
    ...
    UUID fl_date_time_uuid = UUIDs.endOf(fl_date_in_mili);
    // or
    UUID fl_date_time_uuid = UUIDs.startOf(fl_date_in_mili);

    ...
    ...
    ...
    Insert query = QueryBuilder.insertInto("flights")
            .value("id", flight.getId())
            ......
            .value("fl_date", flDateTimeUUID)
            .value("airline_id", flight.getAirlineId())
            .....

这里我们使用:com.datastax.driver.core.utils.UUIDs;,它可以在datastax cassandra驱动程序中找到。

票数 1
EN

Stack Overflow用户

发布于 2018-04-07 02:06:53

您需要将日期从字符串YYYY/MM/DD格式转换为以ms为单位的长格式,并将其传递。您可以使用java date实用程序函数对其进行转换。(How to convert a string Date to long millseconds)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49693300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档