常用

行列转换

https://help.aliyun.com/zh/maxcompute/use-cases/transpose-rows-to-columns-or-columns-to-rows?spm=a2c4g.11186623.0.i29

补充,使用laterval view:

@geea3_query := select query,table_read
,case when locate('WHLSPDCIRCUMLRELEQF',toupper(query))>0 then 1 else 0 end as WHLSPDCIRCUMLRELEQF
,case when locate('VEHSPDINDCDVEHSPDINDCD',toupper(query))>0 then 1 else 0 end as VEHSPDINDCDVEHSPDINDCD
,case when locate('WHLSPDCIRCUMLRERIQF',toupper(query))>0 then 1 else 0 end as WHLSPDCIRCUMLRERIQF
from ods_meta.ods_holo_query_log_di where dt='20240814' and table_read like '%geea3%';

@geea3_query_col2row := SELECT
query
,table_read
,KEY AS field_name
,IF(value IS NULL,0,value) AS check_result
FROM @geea3_query
LATERAL VIEW EXPLODE(MAP('WHLSPDCIRCUMLRELEQF',WHLSPDCIRCUMLRELEQF,'VEHSPDINDCDVEHSPDINDCD',VEHSPDINDCDVEHSPDINDCD,'WHLSPDCIRCUMLRERIQF',WHLSPDCIRCUMLRERIQF)) t2 AS KEY ,value
;

SELECT
field_name
,sum(check_result)
FROM @geea3_query_col2row
GROUP BY field_name
;
 
sql调优:
https://developer.aliyun.com/ebook/3764/read?spm=a2c6h.26392459.ebook-detail.4.35494291R1gyIV
 
任务型:你是一个什么角色,干什么事,输出什么格式
few shot:给些输出示例等,让他学习
思维链:告诉大模型你是如何思考的

## 任务
回答数学问题,直接输出结果,无需解释说明

## 示例
Q: 如果你有12颗糖果,并且你给了朋友4颗糖果,你还剩下多少颗糖果?
A: 答案是8颗
Q: 如果一个矩形的长度为6厘米,宽度为3厘米,那么这个矩形的周长是多少?
A: 答案是18厘米

## 问题
Q: 小明有12支画笔。他给了妹妹1/4。小明还剩下多少支画笔?

可以补充思维链:
思维链示例:
## 示例
Q: 如果一个矩形的长度为6厘米,宽度为3厘米,那么这个矩形的周长是多少?
分析过程:对于矩形的周长计算,需要将长度和宽度相加然后将其乘以2。所以,这个矩形的周长是(6 +3)x2= 18厘米。
A:答案是18厘米
 

 

在DataWorks将DataHub数据同步至MaxCompute的过程中,提到的根据execute_time自动分区实际上是指同步任务执行时,利用数据写入DataHub的具体时间来决定数据应被分配到MaxCompute表的哪个时间分区中。这里提及的execute_time应当理解为一个泛指概念,实际操作中更准确的说法应是数据写入DataHub的时间或者同步任务执行时参照的时间基准,这与文档中描述的“SYSTEM_TIME同步模式”紧密相关。下面我将基于提供的参考资料,详细解释这一机制的原理及应用实例。

原理说明
SYSTEM_TIME模式 下,分区依据是 Record写入DataHub的时间 。这意味着,当一条数据记录被发送到DataHub时,该记录的到达时间会被记录下来。随后,DataWorks在执行同步任务时,会根据这些时间戳将数据分配到MaxCompute表的相应时间分区中。为了实现这一点,需要在同步任务配置中设定MaxCompute表的分区格式(如ds代表日期,hh代表小时等)以及时间转换的Format格式,确保时间戳能够正确映射到MaxCompute的分区字段上。

实例讲解
假设我们有一个MaxCompute表log_table,它按天(ds)分区,且我们配置了一个DataWorks任务,用于将DataHub中的日志数据同步至该表,采用SYSTEM_TIME模式进行分区。

配置MaxCompute表分区:表定义可能类似于 CREATE TABLE log_table (log_content STRING) PARTITIONED BY (ds STRING);

DataHub数据写入:2023-04-05当天,不同的日志记录在不同时刻被发送到名为my_log_topic的DataHub Topic中,这些记录带有它们各自写入DataHub的确切时间戳。

同步任务配置:在DataWorks中创建同步任务时,选择SYSTEM_TIME模式,并设定分区格式为ds=$[yyyymmdd],意味着根据数据的写入时间自动划分到对应的日期分区。

执行同步:当同步任务于2023-04-06凌晨执行时,它会检查前一天(2023-04-05)所有写入DataHub的数据,并根据它们的写入时间(例如,2023-04-05 12:34:56)自动将这些数据归类到ds='20230405'的分区中。

注意事项
时间戳单位:确保DataHub中的时间戳与MaxCompute分区配置的时间单位相匹配,默认为微秒,若写入的是毫秒级时间戳,需要转换为微秒以避免时间错位问题。
时区设置:正确配置时区信息,以保证分区时间的准确性,避免因时区差异导致的数据错配。
综上所述,execute_time(此处特指数据写入DataHub的时间)自动分区机制,通过分析数据记录的实际到达时间,自动将其分配到MaxCompute表预设的时间分区中,实现了数据的有序归档和高效管理。
posted @ 2024-08-19 14:00  ---江北  阅读(8)  评论(0编辑  收藏  举报
TOP