当前位置: 首页 > 知识库问答 >
问题:

使用Java Cassandra Spark SQL连接器按日期查询时遇到困难

梅耘豪
2023-03-14
SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("SparkTest")
    .set("spark.executor.memory", "1g")
    .set("spark.cassandra.connection.host", "localhost")
    .set("spark.cassandra.connection.native.port", "9042")
    .set("spark.cassandra.connection.rpc.port", "9160");
JavaSparkContext context = new JavaSparkContext(sparkConf);
JavaCassandraSQLContext sqlContext = new JavaCassandraSQLContext(context);
sqlContext.sqlContext().setKeyspace("mykeyspace");

String sql = "SELECT * FROM trip WHERE utc_startdate >= '2015-01-01' AND utc_startdate < '2015-12-31' AND deployment_id = 1 AND device_id = 1";
JavaSchemaRDD rdd = sqlContext.sql(sql);
List<Row> rows = rdd.collect(); // rows.size() is zero when I would expect it to contain numerous rows.
CREATE TABLE trip (
    device_id bigint,
    deployment_id bigint,
    utc_startdate timestamp,
    other columns....
    PRIMARY KEY ((device_id, deployment_id), utc_startdate)
) WITH CLUSTERING ORDER BY (utc_startdate ASC);

共有1个答案

商运锋
2023-03-14

您的表模式(特别是主键定义)是什么样子的?即使没有看到它,我也相当肯定您看到了这种行为,因为您没有使用分区键来限定查询。使用Allow Filtering指令将按date筛选行(假设这是您的集群键),但对于大型集群或大型数据集来说,这不是一个好的解决方案。

假设您正在查询某个地理区域的用户。如果使用区域作为分区键,则可以运行此查询,它将工作:

SELECT * FROM users
WHERE region='California'
AND date >= '2015-01-01' AND date <= '2015-12-31';

请阅读Patrick McFadin关于Timeseries数据入门的文章。这有一些很好的例子应该对你有所帮助。

 类似资料:
  • 问题内容: 我在集合中将值存储为java.util.Date(),但是当我查询以获取两个特定日期之间的值时,最终得到的值超出了范围。这是我的代码: 插入 查询 当我在和之间查询时(基本上是fromDate = toDate),我得到的日期绝对不可能的对象。我在这里想念什么? 问题答案: 您正在执行的操作是仅在键覆盖中使用丢失运算符进行查询。您想要的是:

  • 问题内容: 我正在使用python-dateutil从字符串中解析日期: 我期望的是引发异常,但它返回的是当前日期。如果在提供的字符串中找不到日期,有人可以告诉我如何避免获取当前日期吗? 提前致谢。 问题答案: 请参阅dateutil文档,特别是解析函数(强调我的): 此外,可以使用以下关键字参数: 默认值 如果给出,则它必须是日期时间实例。解析日期中缺少的任何字段都将从该实例复制。 默认值为当前

  • 我尝试创建一个查询,显示入住和退房日期之间的可用酒店。此外,当我为特定房间预订时,我将他们的预订列设置为1。这意味着,在现实生活中,当结账日期到来时,触发函数将该预订列设置成0。 如果酒店的所有房间都已预订(预订=1),并且这些房间的签入-退房日期是特定日期(签入-退房输入),则不要将该酒店放在列表中。我的查询不会显示我想要的结果。 查询:输入:国家(状态)、签入和签出。 当我运行查询时,它总是显

  • 我需要帮助查询与日期范围的长收集。请参阅下面的示例文档。我想用日期范围查询startTime字段。

  • 在mongoDB中使用日期/时间字段查询mongoDB有很多解决方案,但是如果mongo文档没有日期/时间域怎么办? 我注意到,当我将鼠标悬停在document_id(使用NoSQLBooster for MongoDB)上时,会出现一个“createdAt”下拉列表(见下面的屏幕截图)。只是想知道是否有任何方法可以使用pymongo进行查询,其中使用“createdAt”元数据根据日期/时间范围

  • 问题内容: 我有这个SQL查询: 结果是这样的: 我现在的问题是我无法将DateCreated分组,因为它具有不同的时间。 我只想按日期分组。范例:2010-09-12 谢谢并恭祝安康… 问题答案: 我认为值得单独发布以下内容: 使用char转换来削减超时日期(广播或转换为varchar)比使用慢。我制定了[完整的脚本和性能测试结果以支持此断言 另外,请注意,您的GROUP BY列表与SELECT