【问题标题】:Java Cassandra Exception timeuuidJava Cassandra 异常timeuuid
【发布时间】:2018-09-16 12:17:18
【问题描述】:

在 java 中,插入 cassandra 时出现此错误, 我也尝试过时间戳数据类型,

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

读取 csv 文件。

错误:

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,

代码:

    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());
    }
}
}

【问题讨论】:

  • 你的表结构是什么?我的假设是您正在尝试将日期插入 timeuuid 列
  • 正确的格式是timeuuid数据是YYYY/MM/DD
  • 这里可以打印fl_date的一个值的内容吗?

标签: java cassandra


【解决方案1】:

Cassandra 中不存在将您的字符串日期时间转换为 TimeUUID 的直接方法。因此,您需要根据日期时间值制作 timeuuid。这是一个简单的例子:

    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 驱动程序中找到。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 2017-04-04
      • 2011-07-18
      • 1970-01-01
      • 2015-10-22
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      相关资源
      最近更新 更多