Database 从数据库中选择时间戳时出现WSO2 DSS问题

Database 从数据库中选择时间戳时出现WSO2 DSS问题,database,cassandra,timestamp,wso2,wso2dss,Database,Cassandra,Timestamp,Wso2,Wso2dss,我在WSO2 DSS中定义一个查询以从Cassandra中获取一些数据时遇到了一个问题。查询(和操作)本身正在工作,但我的问题是当我尝试获取时间戳作为结果时。 我只得到日期和时区(2017-01-11+0100),时间部分缺失。我猜这与dateTime xsdType的映射有某种关系,该映射无法正常工作。 您是否已经面临这个问题,您是否有获取时间戳的解决方案 这是一个查询示例 <query id="getDataQuery" useConfig="CassandraDB">

我在WSO2 DSS中定义一个查询以从Cassandra中获取一些数据时遇到了一个问题。查询(和操作)本身正在工作,但我的问题是当我尝试获取时间戳作为结果时。 我只得到日期和时区(2017-01-11+0100),时间部分缺失。我猜这与dateTime xsdType的映射有某种关系,该映射无法正常工作。 您是否已经面临这个问题,您是否有获取时间戳的解决方案

这是一个查询示例

<query id="getDataQuery" useConfig="CassandraDB">
    <expression>SELECT ts,value FROM keyspace.ts_tp WHERE name = :name</expression>
    <result element="result" rowName="data">
        <element column="ts" name="ts" xsdType="dateTime"/>
        <element column="value" name="value" xsdType="decimal"/>
    </result>
    <param name="name" paramType="SCALAR" sqlType="STRING"/>
</query>

从keyspace.ts\u tp中选择ts,其中name=:name

感谢

似乎是dss日期时间映射中的一个问题,我打开了一个。为了使我的调用返回正确的值,我做了以下操作(警告:)

查询现在返回unix时间戳,单位为ms

<query id="getDataQuery" useConfig="CassandraDB">
    <expression>SELECT unixTimestampOf(minTimeuuid(ts)) as dt,value FROM keyspace.ts_tp WHERE source = :source and name = :name and bucket = :bucket and ts &gt;= :tsFrom and ts &lt;= :tsTo</expression>
    <result element="result" rowName="data">
        <element column="dt" name="ts" xsdType="int"/>
        <element column="value" name="value" xsdType="decimal"/>
    </result>
    <param name="source" paramType="SCALAR" sqlType="STRING"/>
    <param name="name" paramType="SCALAR" sqlType="STRING"/>
    <param name="bucket" paramType="SCALAR" sqlType="INTEGER"/>
    <param name="tsFrom" paramType="SCALAR" sqlType="TIMESTAMP"/>
    <param name="tsTo" paramType="SCALAR" sqlType="TIMESTAMP"/>
</query>

选择unixTimestampOf(minTimeuuid(ts))作为dt,value FROM keyspace.ts_tp其中source=:source和name=:name和bucket=:bucket和ts=:tsFrom和ts=:tsTo
得到结果后,我应用XSL转换来计算日期

<xsl:stylesheet exclude-result-prefixes="xsl soapenv" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="utf-8" indent="yes" method="xml" omit-xml-declaration="yes"/>
   <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>

    <xsl:template match="dt">
      <xsl:element name="ts">
         <xsl:value-of select='xs:dateTime("1970-01-01T00:00:00") + . * xs:dayTimeDuration("PT0.001S")'/>
      </xsl:element>
    </xsl:template>
</xsl:stylesheet>


它需要在不同的时区进行测试,并且可以节省一天的时间,但这似乎是一个正在工作的黑客程序,正在等待正式的修复。

一个“痛苦”的选项是处理unix时间戳,然后在ESB中执行转换,方法是将查询更改为
选择unixTimestampOf(minTimeuuid(ts))作为ts,来自keyspace.ts_tp的值,其中name=:name
,但我无法想象,对于这个问题没有更直接的解决方案