从数据库中选择时间戳时出现 WSO2 DSS 问题
WSO2 DSS issue when selecting Timestamps from Database
我在定义查询以在 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>
谢谢
好像是dss dateTime映射的问题,我开了一个Jira ticket @wso2确定一下。为了使我的调用 return 正确的值,我做了以下(警告痛苦的解决方案 :))
查询 returns 现在是 unix 时间戳(以毫秒为单位)
<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 >= :tsFrom and ts <= :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>
得到结果后,我应用 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>
它需要在不同的时区和夏令时进行测试,但它似乎是一个有效的 hack,等待官方修复。
我在定义查询以在 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>
谢谢
好像是dss dateTime映射的问题,我开了一个Jira ticket @wso2确定一下。为了使我的调用 return 正确的值,我做了以下(警告痛苦的解决方案 :))
查询 returns 现在是 unix 时间戳(以毫秒为单位)
<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 >= :tsFrom and ts <= :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>
得到结果后,我应用 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>
它需要在不同的时区和夏令时进行测试,但它似乎是一个有效的 hack,等待官方修复。