全部产品
云市场

如何用Mapjoin缓存多张小表?

更新时间:2019-01-09 14:20:06

如果您的一个 SQL 中,需要用 Mapjoin 缓存多张表,那么您可以在 Mapjoin 的括号中,写表的别名。示例如下:

此示例是著名的鸢尾花的数据,表名为 iris,表结构如下所示:

  1. +——————————————————————————————————————————+
  2. | Field | Type | Label | Comment |
  3. +——————————————————————————————————————————+
  4. | sepal_length | double | | |
  5. | sepal_width | double | | |
  6. | petal_length | double | | |
  7. | petal_width | double | | |
  8. | category | string | | |
  9. +——————————————————————————————————————————+

SQL 语句如下所示:

  1. select
  2. /*+ mapjoin(b,c) */
  3. a.,
  4. b.cnt as cnt_category,
  5. c.cnt as cnt_all
  6. from iris a
  7. join
  8. (
  9. select count() as cnt,category from iris group by category
  10. ) b
  11. on a.category = b.category
  12. join
  13. (
  14. select count(*) as cnt from iris
  15. ) c;