Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A DDL shell for creating, managing, and inspecting schemas on HBase using KijiSchema
Scala Shell

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
src
.gitignore
COMPILING.md
LICENSE.txt
NOTICE.txt
README.md
RELEASE_NOTES.txt
REVIEWERS
TODO
file
pom.xml

README.md

Introduction

The KijiSchema DDL Shell implements a layout definition language that allows you to create, modify, inspect, and delete kiji table layouts. A table layout is the KijiSchema data dictionary element that defines a set of column families, qualifiers, etc. and associates these columns with Avro schemas.

With this shell, you can quickly create tables to use in your KijiSchema applications. You can add, drop, or modify columns quickly too. These modifications can be performed without any downtime associated with the table; the only exception is that modifying a locality group causes the table to be taken offline while applying changes. But locality group changes should be rare in running applications.

Finally, this shell allows you to quickly understand the layout of an existing table. The DESCRIBE command will pretty-print the layout of a table, eliminating the guesswork as to where your coworker has stashed an important piece of data.

For more information about KijiSchema and the Kiji system, see www.kiji.org.

Running

  • Export $KIJI_HOME to point to your KijiSchema installation. If you source kiji-env.sh in the BentoBox, this is taken care of.
  • Run bin/kiji-schema-shell

This command takes a few options (e.g., to load a script out of a file). See bin/kiji-schema-shell --help for all the available options.

An Example

CREATE TABLE users WITH DESCRIPTION 'some data'
ROW KEY FORMAT (username STRING)
WITH LOCALITY GROUP default WITH DESCRIPTION 'main storage' (
  MAXVERSIONS = INFINITY,
  TTL = FOREVER,
  INMEMORY = false,
  COMPRESSED WITH GZIP,
  FAMILY info WITH DESCRIPTION 'basic information' (
    name "string" WITH DESCRIPTION 'The user\'s name',
    email "string",
    age "int"),
  MAP TYPE FAMILY integers COUNTER WITH DESCRIPTION 'metric tracking data'
);

ALTER TABLE users ADD MAP TYPE FAMILY strings { "type" : "string" }
  WITH DESCRIPTION 'ad-hoc string data' TO LOCALITY GROUP default;

SHOW TABLES;
DESCRIBE EXTENDED users;
DROP TABLE users;
SHOW TABLES;

Language Reference

To read a full reference manual for this component, see The DDL reference in the online KijiSchema user guide.

API

You can use the org.kiji.schema.shell.api.Client object to programmatically invoke DDL commands from a Java or Scala-based system.

Example:

import org.kiji.schema.KijiURI;
import org.kiji.schema.shell.api.Client;

void exampleMethod() {
  Client client = Client.newInstance(KijiURI.parse("kiji://.env/default"));
  try {
    // One or more calls to executeUpdate(). These will throw DDLException
    // if there's a problem with your DDL statement.
    client.executeUpdate("DROP TABLE t");
  } finally {
    // Always call close when you're done.
    client.close();
  }
}

You will need to include this artifact in your project's dependency list. For maven users:

<dependency>
  <groupId>org.kiji.schema-shell</groupId>
  <artifactId>kiji-schema-shell</artifactId>
  <version>${project.version}</version>
</dependency>
Something went wrong with that request. Please try again.