首页 > 其他分享 >redshift同步数据到S3

redshift同步数据到S3

时间:2024-07-11 09:30:08浏览次数:13  
标签:lf 同步 redshift S3 bm app -- s3 table

MV data refresh solution:   Redshift 卸载 -> s3   RTA table logic: redshift-> Hive -> s3 hql in Hive: create schema app_bm_graphics_lf_telemetry_${env}_spectrum_stage; create schema app_bm_graphics_lf_telemetry_${env}_spectrum;   sql in redshift: create external schema if not exists app_bm_graphics_lf_telemetry_${env}_spectrum_stage from hive metastore database 'app_bm_graphics_lf_telemetry_${env}_spectrum_stage' uri 'EMR_IP' port 9083 iam_role 'arn:aws:iam::{420302173806/851474929481}:role/DEVELOPER';   create external schema if not exists app_bm_graphics_lf_telemetry_${env}_spectrum from hive metastore database 'app_bm_graphics_lf_telemetry_${env}_spectrum' uri 'EMR_IP' port 9083 iam_role 'arn:aws:iam::{420302173806/851474929481}:role/DEVELOPER';   grant all on schema app_bm_graphics_lf_telemetry_${env}_spectrum to {user}; grant all on schema app_bm_graphics_lf_telemetry_${env}_spectrum_stage to {user};   unload 表数据 -> s3: UNLOAD ('${deduplication_select_sql}') TO 's3://seals-lf-normalized-data-lake-${env}/temp/${table_name}/' iam_role 'arn:aws:iam::{420302173806/851474929481}:role/DEVELOPER' FORMAT AS PARQUET PARTITION BY (${partition_columns});   create external table app_bm_graphics_lf_telemetry_${env}_spectrum.${table_name} ( column1 VARCHAR(45), column2 INTEGER, column3 DECIMAL(38,20), column4 DOUBLE PRECISION, column5 4TIMESTAMP ) row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = '\t' ) stored as textfile location 's3://seals-lf-normalized-data-lake-${env}/temp/${table_name}/';   需要注意的是: 在Hive里创建外部表 (super user 权限)       MV Story -> logic (daily):   app_bm_graphics_lf_telemetry_itg_spectrum_stage 存放子表和增量更新的临时表,对应的s3路径是: s3://seals-lf-normalized-data-lake-${env}/stage/${table_name}/ app_bm_graphics_lf_telemetry_itg_spectrum 存放最终的final表对应的s3路径是: s3://seals-lf-normalized-data-lake-${env}/${table_name}/   s3.finalPath=s3://seals-lf-normalized-data-lake-itg/${table_name}/ s3.stagePath=s3://seals-lf-normalized-data-lake-itg/stage/${table_name}/     unload 和create external table 模板:   unload_template=UNLOAD ('${sqlUnload}') TO '${s3Path}' \ iam_role 'arn:aws:iam::420302173806:role/DEVELOPER' \ FORMAT AS PARQUET \ PARTITION BY (${partitionColumn});   create_template=${sqlCreate} \ row format delimited fields terminated by '\t' \ stored as parquet \ location '${s3Path}';     #sql模板: # -- sql模板是 xxx.properties ${table}.step= ${table}_step1,${table}_step2,${table}_final # -- step 配置的顺序,就是执行的顺序,(从左往右执行) # --step可以是多个 但是需要注意的是最后一个step的名称,必须是${table}_final 的格式   ${table}_step1.flag=0 # -- (flag的值只能设置0和1,flag=0代表全量刷新, flag=1增量刷新) ${table}_step1.partition_column= ${table}_step1.unload= ${table}_step1.create= ${table}_step1.unload_full= ${table}_step1.create_full= # -- 增量刷新: 有些表中的字段,可能不是update_ts 或者insert_ts # -- 所以这种情况下每天增量更新数据,可能会出现重复的数据,可以在配置sql的时候和final表中的数据进行对比,去重   ${table}_step2.flag=0 ${table}_step2.partition_column= ${table}_step2.unload= ${table}_step2.create= ${table}_step2.unload_full= ${table}_step2.create_full=     ${table}_final.flag=1 ${table}_final.partition_column= ${table}_final.unload= ${table}_final.create= ${table}_final.unload_full= ${table}_final.create_full=     如果有新增的MV 需要配置,我们需要做下面两步操作:   1.按照我们提供的sql模板,整理需要跑的sql 放到项目中的 src/main/resources/sqlFile 目录下: 2.按照表名,在url_daily配置url # -- 格式: sync/rta/refresh/redshift/{table}?async=true       具体的代码逻辑设计:   创建一张report_etl_history表,用来存放job执行的历史信息 CREATE TABLE IF NOT EXISTS app_bm_graphics_lf_telemetry.report_etl_history ( view VARCHAR(20) ENCODE RAW --table 或者 view的名称 ,type VARCHAR(20) ENCODE RAW --执行的类型 refresh/validation ,status VARCHAR(10) ENCODE lzo --执行的状态 DONE/FALIED ,insert_ts TIMESTAMP WITHOUT TIME ZONE ENCODE az64 --执行的时间 ,step VARCHAR(10) ENCODE lzo -- ${table}.step 名称 ,message VARCHAR(200) ENCODE lzo --成功或者异常的日志信息 ) DISTSTYLE KEY DISTKEY (view) SORTKEY ( view ) ;   1.首先处理sql模板数据,获取每一个step 最终需要执行的 unload 和 create external table sql语句 # -- ${table_name} = ${table_name}_年_月_日 (当前系统时间)   # -- 增量刷新 (从 report_etl_history 表中获取需要增量更新的起始时间 ,终止时间是当前系统时间)     2.获取step falg ,判断是全量刷新,还是增量刷新 # -- 全量刷新: step 执行成功后,删除s3.finalPath下的表数据, 把s3.stagePath 下的数据 move 到 s3.finalPath, 刷新分区 # -- 增量刷新 step 执行成功后,直接把s3.stagePath 下的数据 move 到 s3.finalPath, 刷新分区   # -- move成功后, 删除 app_bm_graphics_lf_telemetry_itg_spectrum_stage 中创建的临时表   # -- 执行中监控每一个step的运行状态 # -- 如果执行失败重试这个step操作 ,如果重试次数达到三次还是失败,结束这个job执行     另外,每一个step执行结束后,无论是成功还是失败都会添加一条执行记录到 report_etl_history 表中     4.数据库连接配置,定时API调度     refresh partition msck repair table app_bm_graphics_lf_telemetry_${env}_spectrum.${table_name};          

声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,转载请指明出处!

 

标签:lf,同步,redshift,S3,bm,app,--,s3,table
From: https://www.cnblogs.com/zhihuifan10/p/18295421

相关文章

  • [二、状态管理]2管理组件拥有的状态(4)@Provide装饰器和@Consume装饰器:与后代组件双向同
    @Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。其中@Provide装饰的变量是在祖先节点中,可以理解为被“提供”给后代的状......
  • [二、状态管理]2管理组件拥有的状态(2)@Prop装饰器:父子单向同步
    @Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装饰的变量是可变的,但是变化不会同步回其父组件。说明从APIversion9开始,该装饰器支持在ArkTS卡片中使用。概述@Prop装饰的变量和父组件建立单向的同步关系:@Prop变量允许在本地修改,但修改后的变化不会同步回......
  • 数字政府密码应用建设“三同步一评估”
    文章目录一、数字政府密码应用工程规划阶段二、数字政府密码应用工程建设阶段三、数字政府密码应用工程运行阶段        《国家政务信息化项目建设管理办法》第十五条规定,“项目建设单位应当落实国家密码管理有关法律法规和标准规范的要求,同步规划、同步建......
  • 群辉NAS同步Android手机日历日程
    目录一、安装套件二、手机导出日历日程三、NAS套件导入日历四、获得DAVx5登陆链接五、手机配置六、验证上一篇文章我们解决了Android手机与群辉NAS的通讯录的同步,这期我们说说如何同步Android手机的日历中的日程到群辉NAS。看过上篇文章的伙伴知道,Android需要通过第......
  • 线程同步之自旋锁--SpinLock
    目录自旋锁和互斥锁的区别自旋锁和互斥锁的区别从实现原理上来讲,Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持......
  • css3 box-shadow 浮雕风格按钮
    利用box-shadow实现浮雕风格的按钮。HTML:<form><divclass="segment"><h1>Signup</h1></div><label><inputtype="text"placeholder="EmailAddress"/></label><labe......
  • 遥遥领先!鲲鹏ARM架构下国产数据同步能力大幅提升16.9倍
    在上篇文章《2.6倍!WhaleTunnel客户POC实景对弈DataX》发布之后,一个客户突然向我们控诉其苦DataX久矣,因为是在信创的鲲鹏ARMCPU上运行,每天同步需要很长时间,问我们可以不可以帮忙解决。提起信创ARMCPU,大数据同仁们是又爱又恨,爱是因为价格真的便宜,恨是因为做大数据任务真的是不......
  • Simple WPF: WPF实现一个MINIO等S3兼容对象存储上传文件的小工具
    最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园。创作不易,如果觉得有用请在Github上为博主点亮一颗小星星吧!目的之前在阿里云ECS99元/年的活动实例上搭建了一个测试用的MINIO服务,以前都是直接当基础设施来使用的,这次准备自己学一下S3兼容API相关的对象存储开......
  • 符号同步、定时同步和载波同步
    符号同步、定时同步和载波同步是通信系统中重要的同步技术,它们各自承担着不同的功能和作用。以下是对这三种同步技术的详细解释:符号同步定义:符号同步,也称为定时恢复或时钟恢复,是指在数字通信系统中,接收端为了从接收信号中恢复数据信号,需要对解调器中的接收滤波器的输出......
  • vmware禁止虚拟主机开启后自动时间同步到宿主机
    编辑虚拟机VMX配置文件找到tools.syncTime="FALSE"并在该行下添加如下七行,注意标点符号time.synchronize.continue="FALSE"time.synchronize.restore="FALSE"time.synchronize.resume.disk="FALSE"time.synchronize.shrink="FALSE"......