#client #model #import #table #jobs #query #treasure-data

td-client

Rust Treasure Data客户端库

14个版本 (8个重大变更)

使用旧的Rust 2015

0.9.0 2020年4月29日
0.8.0 2019年2月3日
0.7.2 2019年2月3日
0.7.0 2017年9月22日
0.1.0 2016年8月4日

#2422 in 数据库接口

Download history 9/week @ 2024-04-09 17/week @ 2024-04-23 31/week @ 2024-04-30 2/week @ 2024-05-28 70/week @ 2024-06-04 39/week @ 2024-06-11

每月112次下载

Apache-2.0

55KB
1.5K SLoC

td-client-rust

Rust Treasure Data客户端库

安装

在Cargo.toml中添加以下依赖项

[dependencies]
td-client = "0.9"

用法

首先,将以下行添加到您的crate根目录

extern crate td_client;

然后,使用您的 Treasure Data API 密钥设置 td-client

use td_client::client::*;
use td_client::model::*;

let client = Client::new("your API key");

操作数据库元数据

client.create_database("my_database").unwrap();
println!("{:?}", client.databases().unwrap());
client.delete_database("unused_database").unwrap();

操作表元数据

client.create_table("my_database", "my_table").unwrap();
println!("{:?}", client.tables("my_database").unwrap());
client.swap_table("my_database", "my_table", "my_temp_table").unwrap();
client.rename_table("my_database", "my_temp_table", "unused_table").unwrap();
client.delete_table("my_database", "unused_table").unwrap();

将数据导入到表中

// Import msgpack gzipped file
client.import_msgpack_gz_file_to_table("my_database", "my_table",
                        "/tmp/2016-08-01.msgpack.gz", None).unwrap();

// Import records
let mut chunk = TableImportWritableChunk::new().unwrap();
chunk.next_row(4).unwrap();
chunk.write_key_and_i64("time", time::get_time().sec).unwrap();
chunk.write_key_and_str("name", "foo").unwrap();
chunk.write_key_and_u8("age", 42).unwrap();
chunk.write_key_and_f32("pi", 3.14).unwrap();

chunk.next_row(3).unwrap();
chunk.write_key_and_i64("time", time::get_time().sec).unwrap();
chunk.write_key_and_str("name", "bar").unwrap();
chunk.write_key_and_u8("age", 56).unwrap();

let readable_chunk = chunk.close().unwrap();

client.import_msgpack_gz_file_to_table("my_database", "my_table", 
			readable_chunk.file_path.as_str(), None).unwrap();

作业信息

// List up jobs
println!("{:?}", client.jobs(Some(JobStatusOption::Success), None, None).unwrap());

// Look at the job
println!("{:?}", client.job(1234567).unwrap());

// Check the job's status
println!("{:?}", client.job_status(1234567).unwrap());

执行查询

// Issue a query
let job_id = client.issue_job(
	QueryType::Presto, "sample_datasets",
	"select code, method, count(1) as cnt from www_access group by code, method",
	None, None, None, None, None).unwrap();

println!("job_id={}, status={:?}", job_id, client.wait_job(job_id, None).unwrap());

// Download the result to a file
let result_file = File::create("/tmp/result.msgpack.gz").unwrap();
client.download_job_result(job_id, &result_file).unwrap();

// Do something for each record
client.each_row_in_job_result(job_id, &|xs| println!(">>>> {:?}", xs));

依赖项

~25MB
~528K SLoC