hive sql使用记录

 

关于join 

推荐写法

SELECT 
        a.* 
        ,b.* 
FROM 
        (
                SELECT * 
                FROM a 
                WHERE {subquery_where_condition} 
        ) a 
{LEFT/RIGHT/FULL/LEFT SEMI/LEFT ANTI} JOIN 
        (
                SELECT * 
                FROM b
                WHERE {subquery_where_condition} 
        ) b 
ON {on_condition} 
WHERE {where_condition}
;

做表连接时,尽量将每个表的单表过滤条件单独写成子查询;而不要再join结束后再用where或者on去做单表过滤

要尽量的让参与join的两个表的数据量变小

https://cloud.tencent.com/developer/article/2242914

时间戳

https://blog.csdn.net/a805814077/article/details/115014708

使用JSON_TABLE展开数组

json_field_name字段对应的结构为
{
    "total": 12,
    "details":
    [
        {
            "photoId": "12",
            "photoName": "12name",
            "photoStatus": 2
        },
        {
            "photoId": "13",
            "photoName": "13name",
            "photoStatus": 1
        }
    ]
}
展开的sql如下面
SELECT 
    t.id,  -- 原表所有列(可选)
    photos.*   -- 展开的图片字段
FROM table_name t left join
JSON_TABLE(
    t.json_field_name,   -- JSON 字段名称
    '$.details[*]'           -- 提取 details 数组,json中一个字段叫details,它的值是个数组
    COLUMNS(
        photoId VARCHAR(20) PATH '$.photoId',  -- 图片ID
       photoName VARCHAR(20) PATH '$.photoName',
        photoStatus INT PATH '$.photoStatus'
    )
) AS photos on true where  t.id=218890105;  -- 必需的表别名

 

posted @ 2024-06-28 21:10  halu126  阅读(11)  评论(0)    收藏  举报