阿里云助力您在中国加快取得成功
一站式安全合规咨询服务
MLPS 2.0 一站式合规解决方案
依托我们的网络进军中国市场
提升面向互联网应用的性能和安全性
保障您的中国业务安全无忧
通过强大的数据安全框架保护您的数据资产
申请 ICP 备案的流程解读和咨询服务
面向大数据建设、管理及应用的全域解决方案
企业内大数据建设、管理和应用的一站式解决方案
将您的采购和销售置于同一企业级全渠道数字平台上
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
快速搭建在线教育平台
提供域名注册、分析和保护服务
云原生 Kubernetes 容器化应用运行环境
以 Kubernetes 为使用界面的容器服务产品,提供符合容器规范的算力资源
安全的镜像托管服务,支持全生命周期管理
多集群环境下微服务应用流量统一管理
提供任意基础设施上容器集群的统一管控,助您轻松管控分布式云场景
高弹性、高可靠的企业级无服务器 Kubernetes 容器产品
敏捷安全的 Serverless 容器运行服务
为虚拟机和容器提供高可靠性、高性能、低时延的块存储服务
一款海量、安全、低成本、高可靠的云存储服务
可靠、弹性、高性能、多共享的文件存储服务
全托管、可扩展的并行文件系统服务。
全托管的 NoSQL 结构化数据实时存储服务
可抵扣多种存储产品的容量包,兼具灵活性和长期成本优化
让您的应用跨不同可用区资源自动分配访问量
随时绑定和解绑 VPC ECS
云网络公网、跨域流量统一计费
高性价比,可抵扣按流量计费的流量费用
创建云上隔离的网络,在专有环境中运行资源
在 VPC 环境下构建公网流量的出入口
具备网络状态可视化、故障智能诊断能力的自助式网络运维服务。
安全便捷的云上服务专属连接
基于阿里云专有网络的私有 DNS 解析服务
保障在线业务不受大流量 DDoS 攻击影响
系统运维和安全审计管控平台
业务上云的第一个网络安全基础设施
集零信任内网访问、办公数据保护、终端管理等多功能于一体的办公安全管控平台
提供7X24小时安全运维平台
防御常见 Web 攻击,缓解 HTTP 泛洪攻击
实现全站 HTTPS,呈现可信的 WEB 访问
为云上应用提供符合行业标准和密码算法等级的数据加解密、签名验签和数据认证能力
一款发现、分类和保护敏感数据的安全服务
创建、控制和管理您的加密密钥
快速提高应用高可用能力服务
围绕应用和微服务的 PaaS 平台
兼容主流开源微服务生态的一站式平台
多集群环境下微服务应用流量统一管理
企业级全托管实时数据流平台
全托管,开箱即用的Apache Kafka全托管服务
提供物联网移动端和云交互的消息队列
开箱即用的全托管 RabbitMQ 服务
提供基于消息的可靠异步通信机制
应用之间的消息队列和通知
无服务器事件总线服务
Super MySQL 和 PostgreSQL,高度兼容 Oracle 语法
全托管 MySQL、PostgreSQL、SQL Server、MariaDB
兼容 Redis® 的缓存和KV数据库
兼容Apache Cassandra、Apache HBase、Elasticsearch、OpenTSDB 等多种开源接口
文档型数据库,支持副本集和分片架构
100%兼容 Apache HBase 并深度扩展,稳定、易用、低成本的NoSQL数据库。
低成本、高可用、可弹性伸缩的在线时序数据库服务
专为搜索和分析而设计,成本效益达到开源的两倍,采用最新的企业级AI搜索和AI助手功能。
一款兼容PostgreSQL协议的实时交互式分析产品
一种快速、完全托管的 TB/PB 级数据仓库
基于 Flink 为大数据行业提供解决方案
基于Qwen和其他热门模型的一站式生成式AI平台,可构建了解您业务的智能应用程
一站式机器学习平台,满足数据挖掘分析需求
高性能向量检索服务,提供低代码API和高成本效益
帮助您的应用快速构建高质量的个性化推荐服务能力
提供定制化的高品质机器翻译服务
全面的AI计算平台,满足大模型训练等高性能AI计算的算力和性能需求
具备智能会话能力的会话机器人
基于机器学习的智能图像搜索产品
基于阿里云深度学习技术,为用户提供图像分割、视频分割、文字识别等离线SDK能力,支持Android、iOS不同的适用终端。
语音识别、语音合成服务以及自学习平台
一站式智能搜索业务开发平台
助力金融企业快速搭建超低时延、高质量、稳定的行情数据服务
帮助企业快速测算和分析企业的碳排放和产品碳足迹
企业工作流程自动化,全面提高效率
金融级云原生分布式架构的一站式高可用应用研发、运维平台
eKYC 数字远程在线解决方案
可智能检测、大数据驱动的综合性反洗钱 (AML) 解决方案
阿里云APM类监控产品
实时云监控服务,确保应用及服务器平稳运行
为系统运维人员管理云基础架构提供全方位服务的云上自动化运维平台
面向您的云资源的风险检测服务
提升分布式环境下的诊断效率
日志类数据一站式服务,无需开发就能部署
ECS 预留实例
让弹性计算产品的成本和灵活性达到最佳平衡的付费方式。云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势自带IP上云
自带公网 IP 地址上云全球网络互联
端到端的软件定义网络解决方案,可推动跨国企业的业务发展全球应用加速
提升面向互联网应用的性能和安全性全球互联网接入
将IDC网关迁移到云端云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势金融科技云数据库解决方案
利用专为金融科技而设的云原生数据库解决方案游戏行业云数据库解决方案
提供多种成熟架构,解决所有数据问题Oracle 数据库迁移
将 Oracle 数据库顺利迁移到云原生数据库数据库迁移
加速迁移您的数据到阿里云阿里云上的数据湖
实时存储、管理和分析各种规模和类型的数据数码信贷
利用大数据和 AI 降低信贷和黑灰产风险面向企业数据技术的大数据咨询服务
帮助企业实现数据现代化并规划其数字化未来人工智能对话服务
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人EasyDispatch 现场服务管理
为现场服务调度提供实时AI决策支持在线教育
快速搭建在线教育平台窄带高清 (HD) 转码
带宽成本降低高达 30%广电级大型赛事直播
为全球观众实时直播大型赛事,视频播放流畅不卡顿直播电商
快速轻松地搭建一站式直播购物平台用于供应链规划的Alibaba Dchain
构建和管理敏捷、智能且经济高效的供应链云胸牌
针对赛事运营的创新型凭证数字服务数字门店中的云 POS 解决方案
将所有操作整合到一个云 POS 系统中元宇宙
元宇宙是下一代互联网人工智能 (AI) 加速
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速DevOps
快速、安全地最大限度提高您的DevOps优势数据迁移解决方案
加速迁移您的数据到阿里云企业 IT 治理
在阿里云上构建高效可控的云环境基于日志管理的AIOps
登录到带有智能化日志管理解决方案的 AIOps 环境备份与存档
数据备份、数据存档和灾难恢复用阿里云金融服务加快创新
在云端开展业务,提升客户满意度
为全球资本市场提供安全、准确和数字化的客户体验
利用专为金融科技而设的云原生数据库解决方案
利用大数据和 AI 降低信贷和黑灰产风险
建立快速、安全的全球外汇交易平台
新零售时代下,实现传统零售业转型
利用云服务处理流量波动问题,扩展业务运营、降低成本
快速轻松地搭建一站式直播购物平台
面向大数据建设、管理及应用的全域解决方案
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
以数字化媒体旅程为当今的媒体市场准备就绪您的内容
带宽成本降低高达 30%
快速轻松地搭建一站式直播购物平台
为全球观众实时直播大型赛事,视频播放流畅不卡顿
使用阿里云弹性高性能计算 E-HPC 将本地渲染农场连接到云端
构建发现服务,帮助客户找到最合适的内容
保护您的媒体存档安全
通过统一的数据驱动平台提供一致的全生命周期客户服务
在钉钉上打造一个多功能的电信和数字生活平台
在线存储、共享和管理照片与文件
提供全渠道的无缝客户体验
面向中小型企业,为独立软件供应商提供可靠的IT服务
打造最快途径,助力您的新云业务扬帆起航
先进的SD-WAN平台,可实现WAN连接、实时优化并降低WAN成本
通过自动化和流程标准化实现快速事件响应
针对关键网络安全威胁提供集中可见性并进行智能安全分析
提供大容量、可靠且高度安全的企业文件传输
用智能技术数字化体育赛事
基于人工智能的低成本体育广播服务
专业的广播转码及信号分配管理服务
基于云的音视频内容引入、编辑和分发服务
在虚拟场馆中模拟关键运营任务
针对赛事运营的创新型凭证数字服务
智能和交互式赛事指南
轻松管理云端背包单元的绑定直播流
通过数据加强您的营销工作
元宇宙是下一代互联网
利用生成式 AI 加速创新,创造新的业务佳绩
阿里云高性能开源大模型
借助AI轻松解锁和提炼文档中的知识
通过AI驱动的语音转文本服务获取洞察
探索阿里云人工智能和数据智能的所有功能、新优惠和最新产品
该体验中心提供广泛的用例和产品帮助文档,助您开始使用阿里云 AI 产品和浏览您的业务数据。
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速
元宇宙是下一代互联网
构建发现服务,帮助客户找到最合适的内容
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
加速迁移您的数据到阿里云
在阿里云上建立一个安全且易扩容的环境,助力高效率且高成本效益的上云旅程
迁移到完全托管的云数据库
将 Oracle 数据库顺利迁移到云原生数据库
自带公网 IP 地址上云
利用阿里云强大的安全工具集,保障业务安全、应用程序安全、数据安全、基础设施安全和帐户安全
保护、备份和还原您的云端数据资产
MLPS 2.0 一站式合规解决方案
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
实现对 CloudOps、DevOps、SecOps、AIOps 和 FinOps 的高效、安全和透明的管理
构建您的原生云环境并高效管理集群
快速、安全地最大限度提高您的DevOps优势
实施细粒度安全控制
提供运维效率和总体系统安全性
实时分析您的云消耗并实现节约
实时存储、管理和分析各种规模和类型的数据
登录到带有智能化日志管理解决方案的 AIOps 环境
帮助企业实现数据现代化并规划其数字化未来
帮助零售商快速规划数字化之旅
将全球知名的 CRM 平台引入中国
在线存储、共享和管理照片与文件
构建、部署和管理高可用、高可靠、高弹性的应用程序
快速、安全地最大限度提高您的DevOps优势
将您的采购和销售置于同一企业级全渠道数字平台上
企业内大数据建设、管理和应用的一站式解决方案
帮助企业简化 IT 架构、实现商业价值、加速数字化转型的步伐
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
快速搜集、处理、分析联网设备产生的数据
0.0.201
本文为您介绍使用Tunnel命令过程中的常见问题。
问题类别 | 常见问题 |
使用Tunnel Upload命令上传数据时,不支持通配符或正则表达式。
使用Tunnel Upload命令上传文件时,对文件大小没有限制,但一次上传时长不能超过2小时。您可以根据实际上传速度和时间估算能够上传的数据量。
记录大小不能超过200 MB。
Tunnel Upload默认会使用压缩,如果带宽允许的情况下,可以通过-cp
参数关闭压缩。
可以并行上传。
支持。
您也可以使用Tunnel Upload命令的-acp
参数,自动创建目标分区,默认值为False。详情请参见Tunnel命令。
按照压缩后的大小进行计费。
不支持限速。
如果上传数据太慢,可以考虑使用-threads
参数将数据切片上传,例如将文件切分为10片上传。命令示例如下。
tunnel upload C:\userlog.txt userlog1 -threads 10 -s false -fd "\u0000" -rd "\n";
MaxCompute客户端的配置文件odps_config.ini中除了Endpoint之外还需要配置Tunnel Endpoint。请根据Endpoint进行配置。目前只有华东2(上海)区域不需要设置Tunnel Endpoint。
问题现象
在DataStudio上执行Tunnel Upload命令上传分区数据时,返回报错如下。
FAILED: error occurred while running tunnel command.
产生原因
DataStudio不支持Tunnel Upload命令。
解决措施
根据DataWorks提供的可视化导入数据功能进行操作,请参见上传数据。
如果数据中有回车或空格,可以给数据设置不同于回车或空格的分隔符后,用-rd
和-fd
指定对应的分隔符实现数据的上传。如果无法更换数据中的分隔符,可以将数据作为单独一行上传,然后使用UDF解析。
如下示例数据中包含回车,使用“,”
作为列分隔符-rd
,使用“@”
作为行分隔符-fd
,可以正常上传。
shopx,x_id,100@
shopy,y_id,200@
shopz,z_id,300@
上传命令示例如下。
tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false -rd "," -fd "@";
上传结果如下。
+-----------+-------------+-------------+-----------+--------+
| shop_name | customer_id | total_price | sale_date | region |
+-----------+-------------+-------------+-----------+--------+
| shopx | x_id | 100.0 | 201312 | hangzhou |
| shopy | y_id | 200.0 | 201312 | hangzhou |
| shopz | z_id | 300.0 | 201312 | hangzhou |
+-----------+-------------+-------------+-----------+--------+
Tunnel Upload命令支持上传海量数据,如果出现内存溢出,可能是因为数据的行分隔符和列分隔符设置错误,导致整个文本被认为是同一条数据,全部缓存至内存中,导致内存溢出报错。
这种情况下可以先用少量的数据进行测试,当-td
及-fd
调试成功后再上传全量数据。
Tunnel Upload命令支持文件或目录(指一级目录)的上传,详情请参见Tunnel使用说明。
例如执行如下命令上传文件夹d:\data下的所有数据。
tunnel upload d:\data sale_detail/sale_date=201312,region=hangzhou -s false;
您可以利用Shell脚本实现,以在Windows环境下配合MaxCompute客户端使用Shell脚本为例,Linux环境下原理相同,Shell脚本内容如下。
#!/bin/sh
C:/odpscmd_public/bin/odpscmd.bat -e "create table user(data string) partitioned by (dt int);" //首先创建一个分区表user,分区关键字为dt,本例中MaxCompute客户端的安装路径为C:/odpscmd_public/bin/odpscmd.bat,您可以根据您的实际环境调整路径。
dir=$(ls C:/userlog) //定义变量dir,为存放文件的文件夹下所有文件的名称。
pt=0 //变量pt用于作为分区值,初始为0,每上传好一个文件+1,从而实现每个文件都存放在不同的分区。
for i in $dir //定义循环,遍历文件夹C:/userlog下的所有文件。
do
let pt=pt+1 //每次循环结束,变量pt+1。
echo $i //显示文件名称。
echo $pt //显示分区名称。
C:/odpscmd_public/bin/odpscmd.bat -e "alter table user add partition (dt=$pt);tunnel upload C:/userlog/$i user/dt=$pt -s false -fd "%" -rd "@";" //利用odpscmd首先添加分区,然后向分区中上传文件。
done
实际运行Shell脚本效果如下,本例中以两个文件userlog1及userlog2举例。
完成上传后,您可以在MaxCompute客户端查看表数据。
您可以在Tunnel Upload命令中使用-dbr true
参数忽略脏数据(多列、少列及列数据类型不匹配等情况)。-dbr
参数默认值为False,表示不忽视脏数据;当值为True时,会将不符合表定义的数据全部忽略。详情请参见Upload。
问题现象
使用Tunnel Upload命令上传数据时,返回如下报错。
java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.
at com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93)
at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:92)
at com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:45)
at com.xeshop.task.SaleStatFeedTask.doWork(SaleStatFeedTask.java:119)
at com.xgoods.main.AbstractTool.excute(AbstractTool.java:90)
at com.xeshop.task.SaleStatFeedTask.main(SaleStatFeedTask.java:305)java.io.IOException: RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX, ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.
产生原因
当前文件已经在上传中,无法重复操作。
解决措施
无需重复执行上传操作,等待已有上传任务执行完毕。
问题现象
使用Tunnel Upload命令上传数据时,返回如下报错。
java.io.IOException: Error writing request body to server
产生原因
这是上传数据到服务器时产生的异常,通常是因为上传过程中的网络连接断开或超时导致的:
当您的数据源并非是本地文件,需要从数据库等地方获取时,数据在写入的过程中还需要等待数据获取从而导致超时。在上传数据的过程中,如果600秒没有数据上传,则被认为超时。
用户通过公网的Endpoint上传数据,由于公网网络质量不稳定导致超时。
解决措施
在上传的过程中,先获取数据,再调用Tunnel SDK上传数据。
一个Block可以上传64 MB~100 GB的数据,最好不要超过1万条数据以免因重试导致超时。一个Session可以拥有最多2万个Block。如果您的数据在ECS上,Endpoint信息请参见Endpoint。
问题现象
在执行Tunnel上传数据操作时,返回报错如下。
ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist
产生原因
数据要插入的目标分区不存在。
解决措施:
您可以先通过show partitions table_name;
命令来判断分区是否存在,并通过alter table table_name add [if not exists] partition partition_spec
来创建对应的分区。
通常是因为数据源文件的行分隔符有问题,将多条记录当成了一条记录。您需要查看是否存在此问题,并重新设置-rd
参数。
问题现象
在多线程上传数据场景,返回报错如下。
FAILED: ODPS-0110061: Failed to run ddltask - Modify DDL meta encounter exception : ODPS-0010000:System internal error - OTS transaction exception - Start of transaction failed. Reached maximum retry times because of OTSStorageTxnLockKeyFail(Inner exception: Transaction timeout because cannot acquire exclusive lock.)
产生原因
上传数据时高并发写入同一个表,频繁的并发操作导致报错。
解决措施
适当减少并发数,在请求之间加入延迟时间,并且在出错的时候重试。
在Tunnel Upload命令中添加-h true
参数即可跳过第一行表头。
这种情况是因为数据编码格式错误或分隔符使用错误导致上传到表的数据错误。建议规范原始数据后再执行上传操作。
在系统的命令行执行窗口,您可以通过指定参数快速执行上传操作,上传数据至MaxCompute表的命令如下。
...\odpscmd\bin>odpscmd -e "tunnel upload "$FILE" project.table"
更多命令行启动信息,请参见使用本地客户端(odpscmd)连接。
在Tunnel Upload命令后加上-dbr=false -s true
属性对数据格式进行验证。
出现column mismatch
通常是由于列数不匹配导致的。例如列分隔符设置的不正确或文件最后有空行,导致空行通过分隔符进行分割时列数不匹配。
当MaxCompute客户端上传参数有--scan
时,续跑模式的参数传递存在问题,将--scan=true
去掉重试即可。
一个Block对应一个HTTP Request,多个Block的上传可以并发且是原子的,一次同步请求要么成功要么失败,不会影响其他的Block。
重传Retry有次数的限制,当重传的次数超过了这个限制,就会继续上传下一个Block。上传完成后,可以通过select count(*) from table;
语句,检查是否有数据丢失。
Tunnel Upload命令上传是不设速度限制的。上传速度的瓶颈在于网络带宽、客户端性能以及服务器性能。为了提升性能,可以考虑在上传时分区分表,或通过多台ECS上传数据。
建议将源表拆分为2个任务执行。
应合理设置Block大小。Block ID最大为20000,Session的时间根据具体业务需求设置,Session提交以后数据才可见。建议您创建Session的频率不要太高,最多5分钟一个Session,Session里的Block值应该设置得较大一些,建议每个Block超过64 MB。
Windows的换行符是\r\n
,macOS和Linux的换行符是\n
,Tunnel命令使用系统换行符作为默认列分隔符,所以从macOS或Linux上传Windows编辑保存的文件后,会把\r
作为数据内容导入表。
如果数据描述字段内本身有逗号,可以考虑转换数据的分隔符为其他符号,再通过-fd
指定为其他分隔符进行上传。
Tunnel Upload命令不支持正则表达式。如果数据使用空格作为列分隔符,或需要对数据做正则表达式过滤时可借助MaxCompute的UDF功能。
假设原始数据如下,列分割符为空格,行分隔符为回车,并且需要取的部分数据在引号内,部分数据例如”-“需要被过滤。这种复杂的需求可通过正则表达式实现。
10.21.17.2 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73477.html" 200 0 81615 81615 "-" "iphone" - HIT - - 0_0_0 001 - - - -
10.17.5.23 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73478.html" 206 0 49369 49369 "-" "huawei" - HIT - - 0_0_0 002 - - - -
10.24.7.16 [24/Jul/2018:00:00:00 +0800] - "GET https://example.com/73479.html" 206 0 83821 83821 "-" "vivo" - HIT - - 0_0_0 003 - - - -
实现方式如下:
将数据以单列形式上传,首先在MaxCompute项目内创建一个单列的表格用于接收数据。命令示例如下。
create table userlog1(data string);
使用一个不存在的列分隔符\u0000
上传数据,从而达到不分割列的效果。命令示例如下。
tunnel upload C:\userlog.txt userlog1 -s false -fd "\u0000" -rd "\n";
完成原始数据上传后,使用MaxCompute Studio编写一个Python UDF(您也可以使用Java UDF)并注册函数。编写并注册UDF操作,请参见开发Java UDF或开发Python UDF。
UDF代码示例如下。假设注册的函数名称为ParseAccessLog。
from odps.udf import annotate
from odps.udf import BaseUDTF
import re #此处引入正则函数
regex = '([(\d\.)]+) \[(.*?)\] - "(.*?)" (\d+) (\d+) (\d+) (\d+) "-" "(.*?)" - (.*?) - - (.*?) (.*?) - - - -' #使用的正则表达式
# line -> ip,date,request,code,c1,c2,c3,ua,q1,q2,q3
@annotate('string -> string,string,string,string,string,string,string,string,string,string,string') #请注意string数量和真实数据保持一致,本例中有11列。
class ParseAccessLog(BaseUDTF):
def process(self, line):
try:
t = re.match(regex, line).groups()
self.forward(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10])
except:
pass
完成函数注册后,就可以使用UDF函数处理上传到表格userlog1的原始数据了,注意不要写错列的名称,本例中为data。您可以使用正常的SQL语法,新建一个表格userlog2用于存放处理后的数据。命令示例如下。
create table userlog2 as select ParseAccessLog(data) as (ip,date,request,code,c1,c2,c3,ua,q1,q2,q3) from userlog1;
完成处理后,可以查询userlog2的表数据,数据成功分列。
select * from userlog2;
--返回结果如下。
+----+------+---------+------+----+----+----+----+----+----+----+
| ip | date | request | code | c1 | c2 | c3 | ua | q1 | q2 | q3 |
+----+------+---------+------+----+----+----+----+----+----+----+
| 10.21.17.2 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73477.html | 200 | 0 | 81615 | 81615 | iphone | HIT | 0_0_0 | 001 |
| 10.17.5.23 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73478.html | 206 | 0 | 4936 | 4936 | huawei | HIT | 0_0_0 | 002 |
| 10.24.7.16 | 24/Jul/2018:00:00:00 +0800 | GET https://example.com/73479.html | 206 | 0 | 83821 | 83821 | vivo | HIT | 0_0_0 | 003 |
+----+------+---------+------+----+----+----+----+----+----+----+
建议一张单表(没有分区的表)或一个分区尽量一次性写入数据,不要多次写同一个分区,否则容易出现脏数据。您可以在MaxCompute客户端执行tunnel show bad <sessionid>;
命令查看脏数据。一旦出现脏数据,可以通过如下方法进行删除:
执行drop table ...;
命令删除整张表或执行alter table ... drop partition;
命令删除目标分区后,重新上传数据。
如果脏数据可以通过WHERE条件过滤出来,也可以通过INSERT+WHERE条件,把需要的数据导入到另一张新表或就地更新(源和目的分区/表名相同)。
MaxCompute不支持geometry类型数据,需要将geometry类型数据转换为STRING类型数据才能同步至MaxCompute。
geometry类型是一种特殊的数据类型,不同于SQL标准中的标准数据类型,因此在JDBC的通用框架并不支持,所以导致geometry类型的导入导出需要进行特殊的处理。
使用Tunnel Download导出的数据文件格式为TXT或CSV。
同一地域内使用Tunnel下载数据,必须配置云产品互联网络或VPC网络的Tunnel Endpoint,否则数据可能路由到其他地域,从公网下载数据从而产生费用。
通常是Tunnel Endpoint错误,请检查Tunnel Endpoint配置是否正确。简单的判断方法是通过Telnet等方法检测网络连通性。
问题现象
使用Tunnel Download命令下载数据时,返回报错信息如下。
You have NO privilege ‘odps:Select‘ on {acs:odps:*:projects/XXX/tables/XXX}. project ‘XXX‘ is protected.
产生原因
项目开启了数据保护功能。
解决措施
如果您需要把一个项目中的数据导出至另一个项目,需要该项目所有者进行操作。
Tunnel不支持数据的计算或者过滤。如果需要实现此功能,您可以考虑以下两种方法:
先运行SQL任务,将需要下载的数据保存成一张临时表,下载结束后再删除此临时表。
如果您所需要的数据量比较小,可以使用SQL命令直接查询需要的数据,无需下载。
与时间无关,默认保存500条。
Tunnel上传数据的流程如下:
准备源数据,例如源文件或数据表。
设计表结构和分区定义,进行数据类型转换,然后在MaxCompute上创建表。
在MaxCompute表上添加分区,没有分区时忽略此步骤。
把数据上传到指定分区或表上。
支持中文。
Tunnel使用分隔符时,需要注意:
行分隔符为rd
,列分隔符为fd
。
列分隔符fd
不能包含行分隔符rd
。
Tunnel的默认分隔符为\r\n
(Windows)和\n
(Linux)。
上传开始的时候,屏显会打印提示信息,告知本次上传所使用的行分隔符(0.21.0版本及以后)供用户查看和确认。
可以有空格,参数需要用双引号("")括起来。
Tunnel仅支持文本文件,不支持二进制文件。
Tunnel上传下载受网络因素影响较大,正常网络情况下速度范围为1 MB/s~20 MB/s。
Tunnel域名即公网Tunnel Endpoint,不同地域、不同网络对应不同的Tunnel域名,请参见Endpoint对照表获取公网Tunnel Endpoint。
在MaxCompute客户端安装目录..\odpscmd_public\conf
下的odps_config.ini文件中获取Tunnel域名,在系统命令行窗口执行curl -i 域名
(例如curl -i http://dt.odps.aliyun.com
)命令测试网络是否连通,若无法连通请检查设备网络或更换为正确的Tunnel域名。
问题现象
使用Tunnel命令上传或下载数据时,返回报错如下。
Java heap space FAILED: error occurred while running tunnel command
产生原因
原因一:上传数据时,单行数据太大导致报错。
原因二:下载数据量太大,客户端程序内存不足。
解决措施
原因一的解决措施:
首先确认是否是分隔符错误,导致所有数据都进入同一行记录,导致单行数据太大。
如果分隔符正确,文件中的单行数据的确很大,则为客户端程序的内存不够用,需要调整客户端进程的启动参数。编辑客户端安装目录bin
下的odpscmd脚本,适当增加Java进程启动选项中的内存值。即将java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@"
中 -Xms64m -Xmx512m
的值增大即可。
原因二的解决措施:编辑客户端安装目录bin
下的odpscmd脚本,适当增加Java进程启动选项中的内存值。即将java -Xms64m -Xmx512m -classpath "${clt_dir}/lib/*:${clt_dir}/conf/"com.aliyun.openservices.odps.console.ODPSConsole "$@"
中 -Xms64m -Xmx512m
的值增大即可。
每个Session在服务端的生命周期为24小时,创建后24小时内均可使用。Session超时后就失效了,此时您不能做任何操作,需要重新创建Session重写数据。
Session在可以跨进程、线程共享使用,但是必须保证同一个BlockId没有重复使用。
如果您未配置Tunnel Endpoint,Tunnel会自动路由到MaxCompute服务所在网络对应的Tunnel Endpoint。如果您配置了Tunnel Endpoint,则以配置为准,不进行自动路由。
支持,命令示例如下。
tunnel upload E:/1.txt tmp_table_0713 --threads 5;