【问题标题】:SQL Query on AWS IoT Rule JSON key starts with numberAWS IoT 规则 JSON 键上的 SQL 查询以数字开头
【发布时间】:2019-07-21 02:50:40
【问题描述】:

我已经研究了几个小时了,还是搞不清楚。所以我想也许这里有人会有想法。

我有正在发布到事物影子的 JSON(发布的 JSON 格式不受我的控制)。 JSON 如下所示:

{"state":{"reported":{"0013A20011223344":{"input_1":1}}}}

我尝试了这个用于向 SNS 发送发布的查询语句:

SELECT "input closed" AS default FROM "$aws/things/Cell_Test_Thing/shadow/update" WHERE state.reported.0013A200418C5535.input_1 = 1

问题是 SQL 查询不喜欢以 0 开头的键。我通过将 0013... 替换为此处的设备来确定这一点,它运行良好:

SELECT "input closed" AS default FROM "$aws/things/Cell_Test_Thing/shadow/update" WHERE state.reported.device.input_1 = 1

所以问题在于 JSON 键以数字开头。如果我将设备更改为 device0 它可以工作,但如果你将它更改为 0device 它会失败。据我所知,以数字开头的 JSON 键是完全有效的,因此希望有一个解决方法。

想法?

【问题讨论】:

  • 你试过用引号包围“列”吗?其他 SQL 实现allow for that.
  • 感谢您的意见@Ellesedil。我尝试用这样的刻度封装 ID,但收到错误意外字符 '' SELECT "Input Closed" AS default FROM "$aws/things/Cell_Test_Thing/shadow/update" WHERE state.reported.0013A200418C5535`.input_1 = 1
  • 嗯,我很确定答案是用一些东西包围属性路径,甚至路径的各个部分。不过,我怀疑它应该是倒钩。尝试一些东西。
  • @TravisElliott 你能找到解决这个问题的方法吗?

标签: sql json aws-iot


【解决方案1】:

试试这个:

SELECT "input closed" AS default 
FROM "$aws/things/Cell_Test_Thing/shadow/update" 
WHERE "state"."reported"."0013A200418C5535"."input_1" = 1

名称的每个部分都必须用引号引起来。这是因为名称有四个部分的结构。

为什么不能只使用一组引号?这样想吧。由四部分组成的名称"state"."reported"."0013A200418C5535"."input_1" 有四个部分,用点分隔。但是,如果其中一个部分中有一个点呢?

(从技术上讲,只有包含某些字符的部分需要引用,但有时将它们全部引用更容易)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2021-06-14
    • 2017-02-22
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多