SQL 例子

  1. %flink.ssql
  2. -- =====================
  3. -- 数据类型
  4. -- =====================
  5. -- 字符串
  6. -- ---------------------
  7. CHAR
  8. CHAR(1)
  9. VARCHAR
  10. VARCHAR(1)
  11. STRING
  12. -- 二进制字符串
  13. -- ---------------------
  14. BINARY
  15. BINARY(1)
  16. VARBINARY
  17. VARBINARY(1)
  18. BYTES
  19. -- 精确数值
  20. -- ---------------------
  21. DECIMAL
  22. DECIMAL(10)
  23. DECIMAL(10, 0)
  24. DEC
  25. DEC(10)
  26. DEC(10, 0)
  27. NUMERIC
  28. NUMERIC(10)
  29. NUMERIC(10, 0)
  30. TINYINT
  31. SMALLINT
  32. INT
  33. INTEGER
  34. BIGINT
  35. FLOAT
  36. DOUBLE
  37. DOUBLE PRECISION
  38. -- 日期和时间
  39. -- ---------------------
  40. DATE
  41. TIME
  42. TIME(0)
  43. TIMESTAMP
  44. TIMESTAMP(6)
  45. TIMESTAMP WITHOUT TIME ZONE
  46. TIMESTAMP(6) WITHOUT TIME ZONE
  47. TIMESTAMP WITH TIME ZONE
  48. TIMESTAMP(6) WITH TIME ZONE
  49. TIMESTAMP WITH LOCAL TIME ZONE
  50. TIMESTAMP(6) WITH LOCAL TIME ZONE
  51. INTERVAL YEAR
  52. INTERVAL YEAR(2)
  53. INTERVAL YEAR(2) TO MONTH
  54. INTERVAL MONTH
  55. INTERVAL DAY
  56. INTERVAL DAY(2)
  57. INTERVAL DAY(2) TO HOUR
  58. INTERVAL DAY(2) TO MINUTE
  59. INTERVAL DAY(2) TO SECOND(2)
  60. INTERVAL HOUR
  61. INTERVAL HOUR TO MINUTE
  62. INTERVAL HOUR TO SECOND(6)
  63. INTERVAL MINUTE
  64. INTERVAL MINUTE TO SECOND(6)
  65. INTERVAL SECOND
  66. INTERVAL SECOND(6)
  67. -- 结构化的数据类型
  68. -- ---------------------
  69. ARRAY<INT>
  70. INT ARRAY
  71. MAP<VARCHAR(1), INT>
  72. MULTISET<INT>
  73. INT MULTISET
  74. ROW<id, INT, `name` VARCHAR(1), price DECIMAL>
  75. ROW<id, INT 'id', `name` VARCHAR(1) '名称', price DECIMAL '价格'>
  76. ROW(id, INT, `name` VARCHAR(1), price DECIMAL)
  77. ROW(id, INT 'id', `name` VARCHAR(1) '名称', price DECIMAL '价格')
  78. -- 其他数据类型
  79. -- ---------------------
  80. BOOLEAN
  81. RAW('class', 'snapshot')
  82. NULL
  83. -- =====================
  84. -- 系统(内置)函数
  85. -- =====================
  86. -- Comparison Functions
  87. -- ---------------------
  88. value1 = value2
  89. value1 <> value2
  90. value1 > value2
  91. value1 >= value2
  92. value1 < value2
  93. value1 <= value2
  94. value1 IS NULL
  95. value1 IS NOT NULL
  96. value1 IS DISTINCT FROM value2
  97. value1 IS NOT DISTINCT FROM value2
  98. value1 BETWEEN ASYMMETRIC value2 AND value3
  99. value1 BETWEEN SYMMETRIC value2 AND value3
  100. value1 NOT BETWEEN value2 AND value3
  101. string1 LIKE string2 ESCAPE 'xxx'
  102. string1 NOT LIKE string2 ESCAPE 'xxx'
  103. string1 SIMILAR TO string2
  104. string1 NOT SIMILAR TO string2
  105. value1 IN (value2, value3)
  106. value1 NOT IN (value2, value3)
  107. EXISTS(sub-query)
  108. value1 IN (sub-query)
  109. value2 NOT IN (sub-query)
  110. -- Logical Functions
  111. -- ---------------------
  112. boolean1 OR boolean2
  113. boolean1 AND boolean2
  114. NOT boolean1
  115. boolean1 IS FALSE
  116. boolean1 IS NOT FALSE
  117. boolean1 IS TRUE
  118. boolean1 IS NOT TRUE
  119. boolean1 IS UNKNOWN
  120. boolean1 IS NOT UNKNOWN
  121. -- Arithmetic Functions
  122. -- ---------------------
  123. + numeric1
  124. - numeric1
  125. numeric1 + numeric2
  126. numeric1 - numeric2
  127. numeric1 * numeric2
  128. numeric1 / numeric2
  129. POWER(numeric1, numeric2)
  130. ABS(numeric1)
  131. MOD(numeric1, numeric2)
  132. SQRT(numeric1)
  133. LN(numeric1)
  134. LOG10(numeric1)
  135. LOG2(numeric1)
  136. LOG(numeric2)
  137. LOG(numeric1, numeric2)
  138. EXP(numeric1)
  139. CEIL(numeric1)
  140. CEILING(numeric1)
  141. FLOOR(numeric1)
  142. SIN(numeric1)
  143. SINH(numeric1)
  144. COS(numeric1)
  145. TAN(numeric1)
  146. TANH(numeric1)
  147. COT(numeric1)
  148. ASIN(numeric1)
  149. ACOS(numeric1)
  150. ATAN(numeric1)
  151. ATAN2(numeric1, numeric2)
  152. COSH(numeric1)
  153. DEGREES(numeric1)
  154. RADIANS(numeric1)
  155. SIGN(numeric1)
  156. ROUND(numeric1, integer1)
  157. PI
  158. E()
  159. RAND()
  160. RAND(integer1)
  161. RAND_INTEGER(integer1)
  162. RAND_INTEGER(integer1, integer2)
  163. UUID()
  164. BIN(integer1)
  165. HEX(numeric1)
  166. HEX(string1)
  167. TRUNCATE(numeric1, integer2)
  168. PI()
  169. -- String Functions
  170. -- ---------------------
  171. string1 || string2
  172. CHAR_LENGTH(string1)
  173. CHARACTER_LENGTH(string1)
  174. UPPER(string1)
  175. LOWER(string1)
  176. POSITION(string1 IN string2)
  177. TRIM(BOTH string1 FROM string2)
  178. TRIM(LEADING string1 FROM string2)
  179. TRIM(TRAILING string1 FROM string2)
  180. LTRIM(string1)
  181. RTRIM(string1)
  182. REPEAT(string1, integer1)
  183. REGEXP_REPLACE(string1, string2, string3)
  184. OVERLAY(string1 PLACING string2 FROM integer1 FOR integer2)
  185. SUBSTRING(string1 FROM integer1 FOR integer2)
  186. REPLACE(string1, string2, string3)
  187. REGEXP_EXTRACT(string1, string2[, integer1])
  188. INITCAP(string1)
  189. CONCAT(string1, string2,...)
  190. CONCAT_WS(string1, string2, string3,...)
  191. LPAD(string1, integer1, string2)
  192. RPAD(string1, integer1, string2)
  193. FROM_BASE64(string1)
  194. TO_BASE64(string1)
  195. ASCII(string1)
  196. CHR(integer1)
  197. DECODE(binary1, string1)
  198. ENCODE(string1, string2)
  199. INSTR(string1, string2)
  200. LEFT(string1, integer1)
  201. RIGHT(string1, integer1)
  202. LOCATE(string1, string2[, integer1])
  203. PARSE_URL(string1, string2[, string3])
  204. REGEXP(string1, string2)
  205. REVERSE(string1)
  206. SPLIT_INDEX(string1, string2, integer1)
  207. STR_TO_MAP(string1[, string2, string3]])
  208. SUBSTR(string1[, integer1[, integer2]])
  209. -- Temporal Functions
  210. -- ---------------------
  211. DATE string1
  212. DATE '2020-08-09'
  213. TIME string1
  214. TIME '20:19:18'
  215. TIMESTAMP string1
  216. TIMESTAMP '2020-08-09 20:19:18'
  217. TIMESTAMP '2020-08-09T20:19:18.001'
  218. INTERVAL string1 range1
  219. CURRENT_DATE
  220. CURRENT_TIME
  221. CURRENT_TIMESTAMP
  222. LOCALTIME
  223. LOCALTIMESTAMP
  224. EXTRACT(timeintervalunit FROM temporal)
  225. YEAR(date1)
  226. QUARTER(date1)
  227. MONTH(date1)
  228. WEEK(date1)
  229. DAYOFYEAR(date1)
  230. DAYOFMONTH(date1)
  231. DAYOFWEEK(date1)
  232. HOUR(timestamp1)
  233. MINUTE(timestamp1)
  234. SECOND(timestamp1)
  235. FLOOR(timepoint TO timeintervalunit)
  236. CEIL(timepoint TO timeintervalunit)
  237. (timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)
  238. DATE_FORMAT(timestamp1, string1)
  239. TIMESTAMPADD(timeintervalunit, interval1, timepoint)
  240. TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)
  241. CONVERT_TZ(string1, string2, string3)
  242. FROM_UNIXTIME(numeric1[, string1])
  243. UNIX_TIMESTAMP()
  244. UNIX_TIMESTAMP(string1[, string2])
  245. TO_DATE(string1[, string2])
  246. TO_TIMESTAMP(string1[, string2])
  247. NOW()
  248. -- Conditional Functions
  249. -- ---------------------
  250. CASE value
  251. WHEN value1_1, value1_2 THEN result1
  252. WHEN value2_1, value2_2 THEN result2
  253. ELSE resultZ
  254. END
  255. CASE
  256. WHEN condition1 THEN result1
  257. WHEN condition2 THEN result2
  258. ELSE resultZ
  259. END
  260. NULLIF(value1, value2)
  261. COALESCE(value1, value2, value3)
  262. IF(condition1, true_value, false_value)
  263. IS_ALPHA(string1)
  264. IS_DECIMAL(string1)
  265. IS_DIGIT(string1)
  266. -- Type Conversion Functions
  267. -- ---------------------
  268. CAST(value1 AS type1)
  269. -- Collection Functions
  270. -- ---------------------
  271. CARDINALITY(array1)
  272. array1[integer1]
  273. array1[1]
  274. ELEMENT(array1)
  275. CARDINALITY(map1)
  276. map1[value1]
  277. map1['key']
  278. -- Value Construction Functions
  279. -- ---------------------
  280. ROW(value1, value2)
  281. (value1, value2)
  282. ARRAY[value1, value2]
  283. MAP[value1, value2, value3, value4]
  284. -- Hash Functions
  285. -- ---------------------
  286. GROUP_ID()
  287. GROUPING(expression1, expression2)
  288. GROUPING_ID(expression1, expression2)
  289. -- Grouping Functions
  290. -- ---------------------
  291. MD5(string1)
  292. SHA1(string1)
  293. SHA224(string1)
  294. SHA256(string1)
  295. SHA384(string1)
  296. SHA512(string1)
  297. SHA2(string1, hashLength)
  298. -- Aggregate Functions
  299. -- ---------------------
  300. COUNT(ALL expression)
  301. COUNT(DISTINCT expression1, expression2)
  302. COUNT(*)
  303. COUNT(1)
  304. AVG(expression)
  305. MAX(expression)
  306. MIN(expression)
  307. STDDEV_POP(expression)
  308. STDDEV_SAMP(expression)
  309. VAR_POP(expression)
  310. VAR_SAMP(expression)
  311. COLLECT(expression)
  312. VARIANCE(expression)
  313. RANK()
  314. DENSE_RANK()
  315. ROW_NUMBER()
  316. LEAD(expression, offset, default)
  317. LAG(expression, offset, default)
  318. FIRST_VALUE(expression)
  319. LAST_VALUE(expression)
  320. LISTAGG(expression, separator)
  321. -- =====================
  322. -- 查询语句
  323. -- =====================
  324. -- ScanProjection Filter
  325. -- ---------------------
  326. SELECT * FROM Orders
  327. SELECT `a`, `c` AS d FROM Orders
  328. SELECT * FROM Orders WHERE b = 'red'
  329. SELECT * FROM Orders WHERE `a` % 2 = 0
  330. SELECT PRETTY_PRINT(user) FROM Orders
  331. -- 聚合
  332. -- ---------------------
  333. SELECT `a`, SUM(b) as d
  334. FROM Orders
  335. GROUP BY `a`
  336. SELECT `user`, SUM(amount)
  337. FROM Orders
  338. GROUP BY TUMBLE(rowtime, INTERVAL '1' DAY), `user`
  339. SELECT COUNT(amount) OVER (
  340. PARTITION BY `user`
  341. ORDER BY proctime
  342. ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
  343. FROM Orders
  344. SELECT COUNT(amount) OVER w, SUM(amount) OVER w
  345. FROM Orders
  346. WINDOW w AS (
  347. PARTITION BY `user`
  348. ORDER BY proctime
  349. ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
  350. SELECT DISTINCT users FROM Orders
  351. SELECT SUM(amount)
  352. FROM Orders
  353. GROUP BY GROUPING SETS ((`user`), (product))
  354. SELECT SUM(amount)
  355. FROM Orders
  356. GROUP BY users
  357. HAVING SUM(amount) > 50
  358. SELECT MyAggregate(amount)
  359. FROM Orders
  360. GROUP BY users
  361. -- Joins
  362. -- ---------------------
  363. SELECT *
  364. FROM Orders INNER JOIN Product ON Orders.productId = Product.id
  365. SELECT *
  366. FROM Orders LEFT JOIN Product ON Orders.productId = Product.id
  367. SELECT *
  368. FROM Orders RIGHT JOIN Product ON Orders.productId = Product.id
  369. SELECT *
  370. FROM Orders FULL OUTER JOIN Product ON Orders.productId = Product.id
  371. SELECT *
  372. FROM Orders o, Shipments s
  373. WHERE o.id = s.orderId AND
  374. o.ordertime BETWEEN s.shiptime - INTERVAL '4' HOUR AND s.shiptime
  375. SELECT users, tag
  376. FROM Orders CROSS JOIN UNNEST(tags) AS t (tag)
  377. SELECT users, tag
  378. FROM Orders, LATERAL TABLE(unnest_udtf(tags)) AS t(tag)
  379. SELECT users, tag
  380. FROM Orders LEFT JOIN LATERAL TABLE(unnest_udtf(tags)) AS t(tag) ON TRUE
  381. SELECT
  382. o_amount, r_rate
  383. FROM
  384. Orders,
  385. LATERAL TABLE (Rates(o_proctime))
  386. WHERE
  387. r_currency = o_currency
  388. SELECT
  389. o.amout, o.currency, r.rate, o.amount * r.rate
  390. FROM
  391. Orders AS o
  392. JOIN LatestRates FOR SYSTEM_TIME AS OF o.proctime AS r
  393. ON r.currency = o.currency
  394. -- 集合操作
  395. -- ---------------------
  396. SELECT *
  397. FROM (
  398. (SELECT `user` FROM Orders WHERE `a` % 2 = 0)
  399. UNION
  400. (SELECT `user` FROM Orders WHERE b = 0)
  401. )
  402. SELECT *
  403. FROM (
  404. (SELECT `user` FROM Orders WHERE `a` % 2 = 0)
  405. UNION ALL
  406. (SELECT `user` FROM Orders WHERE b = 0)
  407. )
  408. SELECT *
  409. FROM (
  410. (SELECT `user` FROM Orders WHERE `a` % 2 = 0)
  411. INTERSECT
  412. (SELECT `user` FROM Orders WHERE b = 0)
  413. )
  414. SELECT *
  415. FROM (
  416. (SELECT `user` FROM Orders WHERE `a` % 2 = 0)
  417. EXCEPT
  418. (SELECT `user` FROM Orders WHERE b = 0)
  419. )
  420. SELECT `user`, amount
  421. FROM Orders
  422. WHERE product IN (
  423. SELECT product FROM NewProducts
  424. )
  425. SELECT `user`, amount
  426. FROM Orders
  427. WHERE product EXISTS (
  428. SELECT product FROM NewProducts
  429. )
  430. -- OrderBy & Limit
  431. -- ---------------------
  432. SELECT *
  433. FROM Orders
  434. ORDER BY orderTime
  435. SELECT *
  436. FROM Orders
  437. ORDER BY orderTime
  438. LIMIT 3
  439. -- 窗口
  440. -- ---------------------
  441. TUMBLE(time_attr, interval1)
  442. HOP(time_attr, interval1, interval1)
  443. SESSION(time_attr, interval1)
  444. TUMBLE_START(time_attr, interval1)
  445. HOP_START(time_attr, interval1, interval1)
  446. SESSION_START(time_attr, interval1)
  447. TUMBLE_END(time_attr, interval1)
  448. HOP_END(time_attr, interval1, interval1)
  449. SESSION_END(time_attr, interval1)
  450. TUMBLE_ROWTIME(time_attr, interval1)
  451. HOP_ROWTIME(time_attr, interval1, interval1)
  452. SESSION_ROWTIME(time_attr, interval1)
  453. TUMBLE_PROCTIME(time_attr, interval1)
  454. HOP_PROCTIME(time_attr, interval1, interval1)
  455. SESSION_PROCTIME(time_attr, interval1)
  456. -- 模式匹配
  457. -- ---------------------
  458. SELECT T.aid, T.bid, T.cid
  459. FROM MyTable
  460. MATCH_RECOGNIZE (
  461. PARTITION BY userid
  462. ORDER BY proctime
  463. MEASURES
  464. `A`.id AS aid,
  465. B.id AS bid,
  466. `C`.id AS cid
  467. PATTERN (`A` B `C`)
  468. DEFINE
  469. `A` AS `name` = 'a',
  470. B AS `name` = 'b',
  471. `C` AS `name` = 'c'
  472. ) AS T
  473. SELECT *
  474. FROM Ticker
  475. MATCH_RECOGNIZE (
  476. PARTITION BY symbol
  477. ORDER BY rowtime
  478. MEASURES
  479. START_ROW.rowtime AS start_tstamp,
  480. LAST(PRICE_DOWN.rowtime) AS bottom_tstamp,
  481. LAST(PRICE_UP.rowtime) AS end_tstamp
  482. ONE ROW PER MATCH
  483. AFTER MATCH SKIP TO LAST PRICE_UP
  484. PATTERN (START_ROW PRICE_DOWN+ PRICE_UP)
  485. DEFINE
  486. PRICE_DOWN AS
  487. (LAST(PRICE_DOWN.price, 1) IS NULL AND PRICE_DOWN.price < START_ROW.price) OR
  488. PRICE_DOWN.price < LAST(PRICE_DOWN.price, 1),
  489. PRICE_UP AS
  490. PRICE_UP.price > LAST(PRICE_DOWN.price, 1)
  491. ) MR;
  492. SELECT *
  493. FROM Ticker
  494. MATCH_RECOGNIZE (
  495. PARTITION BY symbol
  496. ORDER BY rowtime
  497. MEASURES
  498. FIRST(`A`.rowtime) AS start_tstamp,
  499. LAST(`A`.rowtime) AS end_tstamp,
  500. AVG(`A`.price) AS avgPrice
  501. ONE ROW PER MATCH
  502. AFTER MATCH SKIP PAST LAST ROW
  503. PATTERN (`A`+ B)
  504. DEFINE
  505. `A` AS AVG(`A`.price) < 15
  506. ) MR;
  507. SELECT *
  508. FROM Ticker
  509. MATCH_RECOGNIZE(
  510. PARTITION BY symbol
  511. ORDER BY rowtime
  512. MEASURES
  513. `C`.price AS lastPrice
  514. ONE ROW PER MATCH
  515. AFTER MATCH SKIP PAST LAST ROW
  516. PATTERN (`A` B* `C`)
  517. DEFINE
  518. `A` AS `A`.price > 10,
  519. B AS B.price < 15,
  520. `C` AS `C`.price > 12
  521. )
  522. SELECT *
  523. FROM Ticker
  524. MATCH_RECOGNIZE(
  525. PARTITION BY symbol
  526. ORDER BY rowtime
  527. MEASURES
  528. `C`.rowtime AS dropTime,
  529. `A`.price - `C`.price AS dropDiff
  530. ONE ROW PER MATCH
  531. AFTER MATCH SKIP PAST LAST ROW
  532. PATTERN (`A` B* `C`) WITHIN INTERVAL '1' HOUR
  533. DEFINE
  534. B AS B.price > `A`.price - 10
  535. `C` AS `C`.price < `A`.price - 10
  536. )
  537. SELECT *
  538. FROM Ticker
  539. MATCH_RECOGNIZE(
  540. PARTITION BY symbol
  541. ORDER BY rowtime
  542. MEASURES
  543. FIRST(`A`.price) AS startPrice,
  544. LAST(`A`.price) AS topPrice,
  545. B.price AS lastPrice
  546. ONE ROW PER MATCH
  547. PATTERN (`A`+ B)
  548. DEFINE
  549. `A` AS LAST(A.price, 1) IS NULL OR `A`.price > LAST(`A`.price, 1),
  550. B AS B.price < LAST(`A`.price)
  551. )
  552. SELECT *
  553. FROM Ticker
  554. MATCH_RECOGNIZE(
  555. PARTITION BY symbol
  556. ORDER BY rowtime
  557. MEASURES
  558. SUM(A.price) AS sumPrice,
  559. FIRST(rowtime) AS startTime,
  560. LAST(rowtime) AS endTime
  561. ONE ROW PER MATCH
  562. [AFTER MATCH STRATEGY]
  563. PATTERN (`A`+ C)
  564. DEFINE
  565. `A` AS SUM(`A`.price) < 30
  566. )
  567. -- =====================
  568. -- CREATE 语句
  569. -- =====================
  570. -- CREATE TABLE
  571. -- ---------------------
  572. CREATE TABLE Orders (
  573. `user` BIGINT,
  574. product STRING,
  575. order_time TIMESTAMP(3),
  576. WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND
  577. ) WITH (
  578. 'connector' = 'kafka',
  579. 'topic' = 'topic1'
  580. 'properties.bootstrap.servers' = 'broker1'
  581. 'properties.group.id' = 'group1'
  582. 'format' = 'json',
  583. 'scan.startup.mode' = 'earliest-offset',
  584. 'scan.startup.specific-offsets' = 'partition:0,offset:42;partition:1,offset:300',
  585. 'scan.startup.timestamp-millis' = '0',
  586. 'sink.partitioner' = 'fixed'
  587. );
  588. CREATE TABLE kafkaTable (
  589. user_id BIGINT CONSTRAINT primary_key PRIMARY KEY NOT ENFORCED COMMENT '主键',
  590. item_id BIGINT,
  591. category_id BIGINT,
  592. behavior STRING,
  593. ts TIMESTAMP(3)
  594. ) WITH (
  595. 'connector' = 'kafka',
  596. 'topic' = 'user_behavior',
  597. 'properties.bootstrap.servers' = 'localhost:9092',
  598. 'properties.group.id' = 'testGroup',
  599. 'format' = 'csv',
  600. 'scan.startup.mode' = 'earliest-offset'
  601. );
  602. CREATE TABLE MyUserTable (
  603. id BIGINT,
  604. `name` STRING,
  605. age INT,
  606. status BOOLEAN,
  607. CONSTRAINT primary_key PRIMARY KEY (id) NOT ENFORCED
  608. ) WITH (
  609. 'connector' = 'jdbc',
  610. 'url' = 'jdbc:mysql://localhost:3306/test',
  611. 'table-name' = 'table1',
  612. 'driver' = 'com.mysql.jdbc.Driver',
  613. 'username' = 'user1',
  614. 'password' = 'password1',
  615. 'scan.partition.column' = 'column1',
  616. 'scan.partition.num' = '5',
  617. 'scan.partition.lower-bound' = '0',
  618. 'scan.partition.upper-bound' = '10000',
  619. 'scan.fetch-size' = '1000',
  620. 'lookup.cache.max-rows' = '1000',
  621. 'lookup.cache.ttl' = '3600',
  622. 'lookup.max-retries' = '3',
  623. 'sink.buffer-flush.max-rows' = '1000',
  624. 'sink.buffer-flush.interval' = '1s',
  625. 'sink.max-retries' = '3'
  626. );
  627. CREATE TABLE myUserTable (
  628. user_id STRING,
  629. user_name STRING,
  630. uv BIGINT,
  631. pv BIGINT,
  632. PRIMARY KEY (user_id) NOT ENFORCED
  633. ) WITH (
  634. 'connector' = 'elasticsearch-6',
  635. 'hosts' = 'http://host_name:9092;http://host_name:9093',
  636. 'index' = 'myIndex',
  637. 'document-type' = 'json',
  638. 'document-id.key-delimiter' = '_',
  639. 'failure-handler' = 'fail',
  640. 'sink.flush-on-checkpoint' = 'true',
  641. 'sink.bulk-flush.max-size' = '2mb',
  642. 'sink.bulk-flush.interval' = '1s',
  643. 'sink.bulk-flush.backoff.strategy' = 'DISABLED',
  644. 'sink.bulk-flush.backoff.max-retries' = '8',
  645. 'sink.bulk-flush.backoff.delay' = '50ms',
  646. 'connection.max-retry-timeout' = '1000',
  647. 'connection.path-prefix' = '/v1',
  648. 'format' = 'json'
  649. );
  650. CREATE TABLE fs_table (
  651. user_id STRING,
  652. order_amount DOUBLE,
  653. dt STRING,
  654. `hour` STRING
  655. ) PARTITION BY (dt, `hour`) WITH (
  656. 'connector' = 'filesystem',
  657. 'path' = 'hdfs://xxx',
  658. 'format' = 'orc',
  659. 'sink.rolling-policy.file-size' = '128MB',
  660. 'sink.rolling-policy.rollover-interval' = '30 min',
  661. 'sink.rolling-policy.check-interval' = '1 min',
  662. 'sink.partition-commit.trigger' = 'process-time',
  663. 'sink.partition-commit.delay' = '0 s',
  664. 'partition.time-extractor.kind' = 'default',
  665. 'partition.time-extractor.class' = 'PartitionTimeExtractor',
  666. 'partition.time-extractor.timestamp-pattern' = '$year-$month-$day $hour:00:00',
  667. 'sink.partition-commit.policy.kind' = 'metastore,success-file',
  668. 'sink.partition-commit.policy.class' = 'PartitionCommitPolicy',
  669. 'sink.partition-commit.success-file.name' = '_SUCCESS'
  670. );
  671. CREATE TABLE hTable (
  672. rowkey INT,
  673. family1 ROW<q1 INT>,
  674. family2 ROW<q2 STRING, q3 BIGINT>,
  675. family3 ROW<q4 DOUBLE, q5 BOOLEAN, q6 STRING>,
  676. PRIMARY KEY (rowkey) NOT ENFORCED
  677. ) WITH (
  678. 'connector' = 'hbase-1.4',
  679. 'table-name' = 'htable',
  680. 'zookeeper.quorum' = 'xxxx',
  681. 'zookeeper.znode.parent' = '/hbase',
  682. 'null-string-literal' = 'null',
  683. 'sink.buffer-flush.max-size' = '2mb',
  684. 'sink.buffer-flush.max-rows' = '1000',
  685. 'sink.buffer-flush.interval' = '1s'
  686. );
  687. CREATE TABLE datagen (
  688. f_sequence INT,
  689. f_random INT,
  690. f_random_str STRING,
  691. ts AS LOCALTIMESTAMP COMMENT '计算列',
  692. WATERMARK FOR ts AS ts
  693. ) WITH (
  694. 'connector' = 'datagen',
  695. 'rows-per-second' = '10000',
  696. 'fields.f_sequence.kind' = 'sequence',
  697. 'fields.f_sequence.tart' = '1',
  698. 'fields.f_sequence.end' = '1000',
  699. 'fields.f_random.min' = '1',
  700. 'fields.f_random.max' = '1000',
  701. 'fields.f_random_str.length' = '10'
  702. );
  703. CREATE TABLE print_table (
  704. f0 INT,
  705. f1 INT,
  706. f2 STRING,
  707. f3 DOUBLE
  708. ) WITH (
  709. 'connector' = 'print',
  710. 'print-identifier' = 'prefix',
  711. 'standard-error' = 'false'
  712. );
  713. CREATE TABLE print_table WITH ('connector' = 'print')
  714. LIKE source_table (EXCLUDING ALL);
  715. CREATE TABLE blackhole_table (
  716. f0 INT,
  717. f1 INT,
  718. f2 STRING,
  719. f3 DOUBLE
  720. ) WITH (
  721. 'connector' = 'blackhole'
  722. );
  723. CREATE TABLE blackhole_table WITH ('connector' = 'blackhole')
  724. LIKE source_table (EXCLUDING ALL);
  725. -- like options
  726. INCLUDING EXCLUDING
  727. ALL CONSTRAINTS PARTITIONS
  728. OVERWRITING GENERATED OPTIONS WATERMARKS
  729. -- CREATE CATALOG
  730. -- ---------------------
  731. CREATE CATALOG catalog_name1
  732. WITH ('key1' = 'val1', 'key2' = 'val2');
  733. -- CREATE DATABASE
  734. -- ---------------------
  735. CREATE DATABASE IF NOT EXISTS db_name
  736. COMMENT 'database_comment'
  737. WITH ('key1' = 'val1', 'key2' = 'val2');
  738. -- CREATE VIEW
  739. -- ---------------------
  740. CREATE TEMPORARY VIEW IF NOT EXISTS db_name.view_name
  741. col1, col2 COMMENT 'create view'
  742. AS SELECT col1, col2 FROM table1;
  743. -- CREATE FUNCTION
  744. -- ---------------------
  745. CREATE TEMPORARY SYSTEM FUNCTION
  746. IF NOT EXISTS db_name.function_name
  747. AS identifier1 LANGUAGE JAVA
  748. -- =====================
  749. -- DROP 语句
  750. -- =====================
  751. DROP TABLE IF EXISTS db_name.table_name1;
  752. DROP DATABASE IF EXISTS db_name RESTRICT;
  753. DROP VIEW view_name;
  754. DROP FUNCTION function_name;
  755. -- =====================
  756. -- ALTER 语句
  757. -- =====================
  758. ALTER TABLE db_name.table_name1 RENAME TO new_table_name;
  759. ALTER TABLE db_name.table_name1 SET ('key1' = 'val1', 'key2' = 'valu2');
  760. ALTER DATABASE db_name SET ('key1' = 'val1', 'key2' = 'valu2');
  761. ALTER FUNCTION function_name AS identifier LANGUAGE PYTHON;
  762. -- =====================
  763. -- INSERT 语句
  764. -- =====================
  765. -- 追加行到该静态分区中 (date='2019-8-30', country='China')
  766. INSERT INTO country_page_view PARTITION (date='2019-8-30', country='China')
  767. SELECT `user`, cnt FROM page_view_source;
  768. -- 追加行到分区 (date, country) 中,其中 date 是静态分区 '2019-8-30'country 是动态分区,其值由每一行动态决定
  769. INSERT INTO country_page_view PARTITION (date='2019-8-30')
  770. SELECT `user`, cnt, country FROM page_view_source;
  771. -- 覆盖行到静态分区 (date='2019-8-30', country='China')
  772. INSERT OVERWRITE country_page_view PARTITION (date='2019-8-30', country='China')
  773. SELECT `user`, cnt FROM page_view_source;
  774. -- 覆盖行到分区 (date, country) 中,其中 date 是静态分区 '2019-8-30'country 是动态分区,其值由每一行动态决定
  775. INSERT OVERWRITE country_page_view PARTITION (date='2019-8-30')
  776. SELECT `user`, cnt, country FROM page_view_source;
  777. INSERT INTO students
  778. VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
  779. -- =====================
  780. -- SQL Hints
  781. -- =====================
  782. CREATE TABLE kafka_table1 (id BIGINT, name STRING, age INT) WITH (...);
  783. CREATE TABLE kafka_table2 (id BIGINT, name STRING, age INT) WITH (...);
  784. -- override table options in query source
  785. select id, name from kafka_table1 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */;
  786. -- override table options in join
  787. select * from
  788. kafka_table1 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */ t1
  789. join
  790. kafka_table2 /*+ OPTIONS('scan.startup.mode'='earliest-offset') */ t2
  791. on t1.id = t2.id;
  792. -- override table options for INSERT target table
  793. insert into kafka_table1 /*+ OPTIONS('sink.partitioner'='round-robin') */ select * from kafka_table2;
  794. -- =====================
  795. -- DESCRIBE 语句
  796. -- =====================
  797. DESCRIBE db_name.table_name1;
  798. -- =====================
  799. -- EXPLAIN 语句
  800. -- =====================
  801. EXPLAIN PLAN FOR SELECT `count`, word FROM MyTable1 WHERE word LIKE 'F%';
  802. -- =====================
  803. -- USE 语句
  804. -- =====================
  805. USE CATALOG catalog_name1;
  806. USE database_name;
  807. -- =====================
  808. -- SHOW 语句
  809. -- =====================
  810. SHOW CATALOGS;
  811. SHOW DATABASES;
  812. SHOW TABLES;
  813. SHOW VIEWS;
  814. SHOW FUNCTIONS;