大批量处理excel文件到ODPS中方案

  • 大批量处理excel文件到ODPS中方案

    前言

    • 最近所做的项目需要将近五千个excel文件导入到ODPS,并且excel文件内容格式全部不一样。

      刚接到需求时特别的懵,不过工作还是要做的,首先通过查询dataworks中文档来看怎么实现该需求,通过文档了解到只支持csv、txt等格式进行单个上传,然后就开始着手做。

    方案一

    • 1 、首先按照excel文件内容创建表(下图序号1中),然后将excel文件进行处理,删除一些不必要的数据(序号2中的一些空格),然后另存为逗号分隔的csv格式文档,然后在dataworks数据开发中上传csv文件,达到将excel文件上传。(具体的可以参照官网上步骤,非常的详细,我就不啰嗦了)。

    • bc8841b8f2e3b80f075dc1f5ebd3b7630711edd6
    • 备注: 该方式可以实现excel文件转换成csv文件进行上云。但是由于格式不统一,需要逐个的创建表进行上传,一天只上传一百来个excel文件,效率是非常慢的。

    方案二

    • 通过查找发现dataworks支持RDS整库迁移的方式,于是就在想是否可以将这些excel文件批量的上传到RDS中,购买了一个RDS实例,通过半天的学习配置等,发现也无法批量的上传excel文件。

    • 于是就寻找别的方式,最终通过在本机电脑上自建mysql数据库,然后用navicat连接上,通过navicat批量的上传数据到mysql 中,

    07842f9a9537958cc4c6dc554dd6a76e26d4110f

    • d222eae708df1a48e87f4a8d9769239f50b5d299
    • 接着将上传的数据整库的导出成SQL文件,由于RDS的mysql支持上传sql文件,并且最大支持100M内的文件上传,然后执行。
    • 将转储SQL文件结构和数据文件上传到RDS中执行,数据便到RDS中,然后在dataworks中整库迁移数据即可全部同步完成,整个批量上传过程一下午即将五千多个excel文件全部上云。

    方案三

    • 由于考虑到在本机自建mysql毕竟不稳定,就打算购买ECS,然后在上边自建mysql,然后同步数据,不过该方式最终同步成功,但是不建议使用,该方式不支持整库迁移,并且只能写脚本,还要两台以上的ECS,其中一台作为代理,故不推荐该方式。

      以上只是自己在使用中摸索的方法,相信还有更好更完善的方法,希望大家多多分享。

    总的来说dataworks升级到2.0功能是十分强大的,数据保护伞、智能监控、数据服务、任务发布等新功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,explode函数是ODPS的字符串分割函数,用于将一个字符串按照指定的分隔符分割成若干个子字符串,并且将这些子字符串存储到一个数组返回。它的语法格式为:explode(string delim, string str),其delim是指定的分隔符,str是需要分割的字符串。示例代码如下: ``` SELECT * FROM (SELECT explode(',', 'a,b,c') AS word FROM dual) ORDER BY word; ``` 输出结果为: ``` +------+ | word | +------+ | a | | b | | c | +------+ ``` ### 回答2: 在ODPS,explode函数用于将数组类型的数据展开为单个元素。下面是使用explode函数的示例和语法说明: 假设有一张表,包含两列数据:id(字符串类型)和name(数组类型)。 ``` id name 1 ["Tom", "Jerry", "Spike"] 2 ["Mary"] ``` 我们可以使用explode函数将数组类型的name列展开,生成多行数据。 ```sql SELECT id, name_explode FROM table_name LATERAL VIEW explode(name) AS name_explode; ``` 执行以上查询后,会生成如下结果: ``` id name_explode 1 Tom 1 Jerry 1 Spike 2 Mary ``` explode函数接受一个参数,即要展开的数组列。在这个例子,我们指定了name列。explode函数将数组的每个元素都展开为单独的行,并将原来的行复制为每个展开的元素的新行。同时,explode函数会在结果增加一个新的列名,用于存储展开后的单个元素。 需要注意的是,使用explode函数之前,需要确保表的模式已经定义了展开后的列名。在上述例子,我们使用了name_explode作为展开后的列名。 通过使用explode函数,可以方便地将数组类型的数据展开为单个元素,便于进一步的数据处理和分析。 ### 回答3: 在阿里云的ODPS(阿里云大数据计算服务),explode函数用于将传入的数组或者集合类型字段拆分成多个字段。它的语法如下: ``` EXPLODE (array_expression [AS (name, ...)]) [AS (name, ...)] ``` 其,array_expression是需要拆分的数组或者集合类型字段。AS子句用于指定拆分后的字段名称,拆分后的字段会按照AS子句指定的列名称依次命名。 例如,假设有一个包含数组字段的表my_table,包含字段arr,可以使用explode函数将数组拆分成多个字段。示例如下: ```sql SELECT explode(arr) AS col FROM my_table; ``` 上述语句将会将my_table表的arr字段拆分成一个名为col的新字段,col包含arr的每个元素。 如果想要一次性拆分成多个字段,则可以使用多个AS子句。例如,如果数组的元素都是由两个元素组成,可以通过以下方式进行拆分: ```sql SELECT explode(arr) AS (col1, col2) FROM my_table; ``` 上述语句将会将arr字段拆分成两个字段col1和col2,每个字段对应arr数组的一个元素。 需要注意的是,explode函数生成的新字段会增加原始记录的数量,所以会增加计算任务的复杂度和数据量。在使用时需要注意数据量的大小和计算的性能影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值