表格存储提供了管理控制台、命令行工具(Tablestore CLI)和Tablestore SDK三种访问方式。通过Tablestore CLI使用表格存储宽表模型(WideColumn)时,您需要根据所用平台下载相应命令行工具,然后使用命令行工具进行开通表格存储服务、创建实例、配置接入实例信息、创建数据表、读写表中数据以及使用SQL查询数据的操作。
前提条件
已获取用于操作表格存储的阿里云账号或者RAM用户的登录信息。
如果未注册阿里云账号,您需要在阿里云官网注册阿里云账号。
如果要使用RAM用户体验表格存储功能,您需要使用阿里云账号创建RAM用户并授予RAM用户访问表格存储的权限。具体操作,请参见通过RAM Policy为RAM用户授权。
阿里云账号AccessKey泄露会威胁您所有资源的安全。建议您使用RAM用户AccessKey进行操作,可以有效降低AccessKey泄露的风险。
如果要使用命令行工具访问表格存储,您还需要为阿里云账号或者RAM用户创建AccessKey。具体操作,请参见获取AccessKey。
注意事项
通过命令行工具只能创建按量模式下的高性能实例。如果要创建按量模式下的容量型实例,请通过控制台创建实例。具体操作,请参见创建实例。
步骤一:下载并启动命令行工具
根据所用平台下载命令行工具。
平台
下载地址
Windows
Linux
macOS
解压缩下载的工具包,进入命令行工具根目录后,根据所用平台选择相应方式启动命令行工具。
对于Windows平台,双击ts.exe文件。
对于Linux和Mac平台,执行
./ts
命令。说明如果在Linux系统或者Mac系统下无可执行权限,请执行
chmod 755 ts
命令赋权后再启动命令行工具。
启动界面如下所示。
# Welcome to use Command Line Tool for Aliyun Tablestore. Current Version is '2021-11-11'. # _______ _ _ _ # |__ __| | | | | | | # | | __ _ | |__ | | ___ ___ | |_ ___ _ __ ___ # | | / _' || '_ \ | | / _ \ / __|| __| / _ \ | '__| / _ \ # | || (_| || |_) || || __/ \__ \| |_ | (_) || | | __/ # |_| \__,_||_.__/ |_| \___| |___/ \__| \___/ |_| \___| # # Please visit our product website: https://www.aliyun.com/product/ots # You can also join our DingTalk Chat Group (ID: 11789671 or 23307953) to discuss and ask Tablestore related questions. # tablestore>
步骤二:开通表格存储服务
如果已经开通表格存储服务,请跳过此操作。服务仅需开通一次,开通过程免费。
通过config命令配置AccessKey信息。更多信息,请参见启动并配置接入信息。
重要此处必须使用阿里云账号的AccessKey(包括AccessKey ID和AccessKey Secret)。关于获取AccessKey的具体操作,请参见获取AccessKey。
config --id NTS********************** --key 7NR2****************************************
执行
enable_service
命令,开通表格存储服务。
步骤三:创建实例
通过create_instance命令创建一个高性能实例。更多信息,请参见实例操作。
执行以下命令,在华东1(杭州)地域创建myinstance实例,实例类型为高性能实例。
create_instance -d "First instance created by CLI." -n myinstance -r cn-hangzhou
步骤四:配置接入实例信息
通过config命令配置接入信息。更多信息,请参见启动并配置接入信息。
执行以下命令,使用已创建的myinstance实例配置接入信息。
config --endpoint https://myinstance.cn-hangzhou.ots.aliyuncs.com --instance myinstance --id NTSVLeBHzgX2iZfcaXXPJ**** --key 7NR2DiotscDbauohSq9kSHX8BDp99bjs7eNpCR7o****
步骤五:创建并使用数据表
创建数据表后,选择要进行操作的数据表,用于后续表操作或者数据操作。更多信息,请参见数据表操作。
执行如下命令,创建order数据表。
create -t order --pk '[{"c":"id","t":"string"}]'
执行如下命令,使用order数据表。
use --wc -t order
步骤六:数据操作
根据需要进行数据操作,您可以插入一行数据、更新一行数据、读取一行数据、删除一行数据、导入数据或者导出数据。更多信息,请参见数据操作。
插入一行数据
以下示例用于在数据表中插入一行数据。
put --pk '["000000114d884ca1dbd6b9a58e8d0d94"]' --attr '[{"c":"pBrand","v":"brand1"},{"c":"pPrice","v":1599.0},{"c":"payTime","v":1509615334404,"isint":true},{"c":"totalPrice","v":2498.99},{"c":"sName","v":"售周五"},{"c":"pId","v":"p0003004"},{"c":"oId","v":"o0039248410"},{"c":"hasPaid","v":true},{"c":"sId","v":"s0015"},{"c":"orderTime","v":1509614885965,"isint":true},{"c":"pName","v":"brand1 type"},{"c":"cName","v":"消冯八"},{"c":"pType","v":"手机"},{"c":"pCount","v":1,"isint":true},{"c":"cId","v":"c0018"}]'
读取一行数据
以下示例用于读取主键列值为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。
get --pk '["000000114d884ca1dbd6b9a58e8d0d94"]'
输出结果如下所示。
+----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+ | id | cId | cName | hasPaid | oId | orderTime | pBrand | pCount | pId | pName | pPrice | pType | payTime | sId | sName | totalPrice | +----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+ | 000000114d884ca1dbd6b9a58e8d0d94 | c0018 | 消冯八 | true | o0039248410 | 1509614885965 | brand1 | 1 | p0003004 | brand1 type | 1599 | 手机 | 1509615334404 | s0015 | 售周五 | 2498.99 | +----------------------------------+-------+--------+---------+-------------+---------------+--------+--------+----------+-------------+--------+-------+---------------+-------+--------+------------+
更新一行数据
以下示例用于更新主键列为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。无论此行是否存在均会插入新数据,如果之前行已存在,则写入数据时会覆盖原有数据。
update --pk '["000000114d884ca1dbd6b9a58e8d0d94"]' --attr '[{"c":"pBrand","v":"brand2"},{"c":"pPrice","v":1599.0},{"c":"payTime","v":1509615334404,"isint":true},{"c":"totalPrice","v":2498.99},{"c":"sName","v":"售周五"},{"c":"pId","v":"p0003004"},{"c":"oId","v":"o0039248410"},{"c":"hasPaid","v":true},{"c":"sId","v":"s0015"},{"c":"orderTime","v":1509614885965,"isint":true},{"c":"pName","v":"brand2 type"},{"c":"cName","v":"消冯八"},{"c":"pType","v":"手机"},{"c":"pCount","v":1,"isint":true},{"c":"cId","v":"c0018"}]' --condition ignore
导入数据
下载样例数据压缩包到本地并解压,然后执行import命令批量导入数据。
说明样例数据中总共包含100万条订单数据,可通过import -l参数自定义导入行数。
以下示例用于导入样例数据文件中的5万条订单数据到当前表,且使用当前时间作为时间戳。其中yourFilePath表示样例数据压缩包解压后的路径,例如
D:\\order_demo_data_1000000\\order_demo_data_1000000
。import -i yourFilePath --ignore_version -l 50000
输出结果如下所示。
Current speed is: 15800 rows/s. Total succeed count 15800, failed count 0. Current speed is: 27400 rows/s. Total succeed count 43200, failed count 0. Import finished, total count is 50000, failed 0 rows.
扫描数据
以下示例用于扫描获取数据表中的最多10行数据。
scan --limit 10
删除一行数据
以下示例用于删除主键列值为“000000114d884ca1dbd6b9a58e8d0d94”的行数据。
delete --pk '["000000114d884ca1dbd6b9a58e8d0d94"]'
导出数据
导出表中数据到本地JSON文件中。
以下示例用于导出当前表中pId、oId和cName列的数据到本地文件mydata.json。
scan -o /tmp/mydata.json -c pId,oId,cName
步骤七:使用SQL查询数据
SQL查询兼容MySQL的查询语法,同时提供基础的SQL DDL建表能力。对于已有数据表,通过执行CREATE TABLE一键自动建立映射关系后,您可以使用SQL方式访问表中数据。更多信息,请参见SQL查询。
如果要使用SQL语句快速查询表中数据,请执行以下步骤:
执行
sql
命令,进入SQL模式。执行以下命令,为order数据表绑定映射关系。
说明数据表与映射表的字段类型对应关系请参见SQL数据类型映射。
CREATE TABLE `order` ( `id` VARCHAR(1024), `cId` MEDIUMTEXT, `cName` MEDIUMTEXT, `hasPaid` BOOL, `oId` MEDIUMTEXT, `orderTime` BIGINT(20), `pBrand` MEDIUMTEXT, `pCount` BIGINT(20), `pId` MEDIUMTEXT, `pName` MEDIUMTEXT, `pPrice` DOUBLE, `pType` MEDIUMTEXT, `payTime` BIGINT(20), `sId` MEDIUMTEXT, `sName` MEDIUMTEXT, `totalPrice` DOUBLE, PRIMARY KEY(`id`) );
根据需要查询order表中的数据。
示例一:查询10条售货员姓名为“售周五”的订单,按照订单总金额升序排列。
SELECT * FROM `order` WHERE sName = "售周五" ORDER BY totalPrice ASC LIMIT 10;
示例二:统计产品类型为“手机”的订单条数。
SELECT count(*) FROM `order` WHERE pType = "手机";
示例三:统计产品个数大于1的订单条数。
SELECT count(*) FROM `order` WHERE pCount > 1;
如果要退出SQL模式,请执行exit;
命令。