Pulsar SQL REST APIs

本部分列出了构成 Presto REST API v1的资源。

请求 Presto 服务

Presto 服务的所有请求都应该使用 Presto REST API v1 版本。

若要请求服务,请使用显式的 URL http://presto.service:8081/v1。 你需要在发送请求前用真实的 Presto 地址更新 presto.service:8081

POST 请求需要 X-Presto-User Header。 如果你使用身份认证,则必须使用认证配置中指定的相同的 username。 如果你不使用身份验证,可以指定 用户名

  1. X-Presto-User: username

关于 Header 的更新信息,可参考PrestoHeaders

Schema

你可以在 HTTP 正文中使用声明。 所有数据都以 JSON 文档格式接收,JSON 中可能包含一个 nextUri 链接。 如果收到的 JSON 文档包含一个 nextUri 链接, 请求继续使用 nextUri 链接,直到收到的数据不包含 nextUri 链接。 如果没有返回错误,则查询成功。 如果一个 错误 字段显示在 统计信息中,这意味着查询失败。

下面是 show catalogs 的示例。 此查询将持续进行,直到接收的 JSON 文档不包含 nextUri 链接为止。 如果在 stats 中未显示 error,就说明查询成功。

  1. ~ curl --header "X-Presto-User: test-user" --request POST --data 'show catalogs' http://localhost:8081/v1/statement
  2. {
  3. "infoUri" : "http://localhost:8081/ui/query.html?20191113_033653_00006_dg6hb",
  4. "stats" : {
  5. "queued" : true,
  6. "nodes" : 0,
  7. "userTimeMillis" : 0,
  8. "cpuTimeMillis" : 0,
  9. "wallTimeMillis" : 0,
  10. "processedBytes" : 0,
  11. "processedRows" : 0,
  12. "runningSplits" : 0,
  13. "queuedTimeMillis" : 0,
  14. "queuedSplits" : 0,
  15. "completedSplits" : 0,
  16. "totalSplits" : 0,
  17. "scheduled" : false,
  18. "peakMemoryBytes" : 0,
  19. "state" : "QUEUED",
  20. "elapsedTimeMillis" : 0
  21. },
  22. "id" : "20191113_033653_00006_dg6hb",
  23. "nextUri" : "http://localhost:8081/v1/statement/20191113_033653_00006_dg6hb/1"
  24. }
  25. ~ curl http://localhost:8081/v1/statement/20191113_033653_00006_dg6hb/1
  26. {
  27. "infoUri" : "http://localhost:8081/ui/query.html?20191113_033653_00006_dg6hb",
  28. "nextUri" : "http://localhost:8081/v1/statement/20191113_033653_00006_dg6hb/2",
  29. "id" : "20191113_033653_00006_dg6hb",
  30. "stats" : {
  31. "state" : "PLANNING",
  32. "totalSplits" : 0,
  33. "queued" : false,
  34. "userTimeMillis" : 0,
  35. "completedSplits" : 0,
  36. "scheduled" : false,
  37. "wallTimeMillis" : 0,
  38. "runningSplits" : 0,
  39. "queuedSplits" : 0,
  40. "cpuTimeMillis" : 0,
  41. "processedRows" : 0,
  42. "processedBytes" : 0,
  43. "nodes" : 0,
  44. "queuedTimeMillis" : 1,
  45. "elapsedTimeMillis" : 2,
  46. "peakMemoryBytes" : 0
  47. }
  48. }
  49. ~ curl http://localhost:8081/v1/statement/20191113_033653_00006_dg6hb/2
  50. {
  51. "id" : "20191113_033653_00006_dg6hb",
  52. "data" : [
  53. [
  54. "pulsar"
  55. ],
  56. [
  57. "system"
  58. ]
  59. ],
  60. "infoUri" : "http://localhost:8081/ui/query.html?20191113_033653_00006_dg6hb",
  61. "columns" : [
  62. {
  63. "typeSignature" : {
  64. "rawType" : "varchar",
  65. "arguments" : [
  66. {
  67. "kind" : "LONG_LITERAL",
  68. "value" : 6
  69. }
  70. ],
  71. "literalArguments" : [],
  72. "typeArguments" : []
  73. },
  74. "name" : "Catalog",
  75. "type" : "varchar(6)"
  76. }
  77. ],
  78. "stats" : {
  79. "wallTimeMillis" : 104,
  80. "scheduled" : true,
  81. "userTimeMillis" : 14,
  82. "progressPercentage" : 100,
  83. "totalSplits" : 19,
  84. "nodes" : 1,
  85. "cpuTimeMillis" : 16,
  86. "queued" : false,
  87. "queuedTimeMillis" : 1,
  88. "state" : "FINISHED",
  89. "peakMemoryBytes" : 0,
  90. "elapsedTimeMillis" : 111,
  91. "processedBytes" : 0,
  92. "processedRows" : 0,
  93. "queuedSplits" : 0,
  94. "rootStage" : {
  95. "cpuTimeMillis" : 1,
  96. "runningSplits" : 0,
  97. "state" : "FINISHED",
  98. "completedSplits" : 1,
  99. "subStages" : [
  100. {
  101. "cpuTimeMillis" : 14,
  102. "runningSplits" : 0,
  103. "state" : "FINISHED",
  104. "completedSplits" : 17,
  105. "subStages" : [
  106. {
  107. "wallTimeMillis" : 7,
  108. "subStages" : [],
  109. "stageId" : "2",
  110. "done" : true,
  111. "nodes" : 1,
  112. "totalSplits" : 1,
  113. "processedBytes" : 22,
  114. "processedRows" : 2,
  115. "queuedSplits" : 0,
  116. "userTimeMillis" : 1,
  117. "cpuTimeMillis" : 1,
  118. "runningSplits" : 0,
  119. "state" : "FINISHED",
  120. "completedSplits" : 1
  121. }
  122. ],
  123. "wallTimeMillis" : 92,
  124. "nodes" : 1,
  125. "done" : true,
  126. "stageId" : "1",
  127. "userTimeMillis" : 12,
  128. "processedRows" : 2,
  129. "processedBytes" : 51,
  130. "queuedSplits" : 0,
  131. "totalSplits" : 17
  132. }
  133. ],
  134. "wallTimeMillis" : 5,
  135. "done" : true,
  136. "nodes" : 1,
  137. "stageId" : "0",
  138. "userTimeMillis" : 1,
  139. "processedRows" : 2,
  140. "processedBytes" : 22,
  141. "totalSplits" : 1,
  142. "queuedSplits" : 0
  143. },
  144. "runningSplits" : 0,
  145. "completedSplits" : 19
  146. }
  147. }

Note

因为从客户端角度看响应数据与查询状态不同步, 所以不能依靠响应数据来确定查询是否完成。

关于 Presto REST API 的更多信息,请参阅 Presto HTTP 协议