td-client-rust

Rust Client Library for Treasure Data

Requirements

Rust 1.30.0 or newer

Install

Add the following dependency in Cargo.toml

[dependencies] td-client = "0.7"

Usage

First, add this line to your crate root

rust extern crate td_client;

Next, set up a td-client with your API key for Treasure Data

```rust use tdclient::client::*; use tdclient::model::*;

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

Manipulate Database metadata

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

Manipulate Table metadata

rust 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 data to table

```rust // Import msgpack gzipped file client.importmsgpackgzfiletotable("mydatabase", "my_table", "/tmp/2016-08-01.msgpack.gz", None).unwrap();

// Import records let mut chunk = TableImportWritableChunk::new().unwrap(); chunk.nextrow(4).unwrap(); chunk.writekeyandi64("time", time::gettime().sec).unwrap(); chunk.writekeyandstr("name", "foo").unwrap(); chunk.writekeyandu8("age", 42).unwrap(); chunk.writekeyandf32("pi", 3.14).unwrap();

chunk.nextrow(3).unwrap(); chunk.writekeyandi64("time", time::gettime().sec).unwrap(); chunk.writekeyandstr("name", "bar").unwrap(); chunk.writekeyand_u8("age", 56).unwrap();

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

client.importmsgpackgzfiletotable("mydatabase", "mytable", readablechunk.filepath.asstr(), None).unwrap(); ```

Information of jobs

```rust // 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

```rust // Issue a query let jobid = client.issuejob( QueryType::Presto, "sampledatasets", "select code, method, count(1) as cnt from wwwaccess group by code, method", None, None, None, None, None).unwrap();

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

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

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