GithubHelp home page GithubHelp logo

qict777 / tdsql Goto Github PK

View Code? Open in Web Editor NEW

This project forked from groupon/tdsql

0.0 1.0 0.0 240 KB

Run SQL queries against a Teradata data warehouse server

License: BSD 3-Clause "New" or "Revised" License

Makefile 4.51% Perl 67.91% Groff 27.58%

tdsql's Introduction

NAME

tdsql - run SQL queries against a Teradata data warehouse server

SYNOPSIS

% tdsql [-h] [-H host] [-u user] [-p pass] [-d database] [-c charset] [-m mode] [-o file] [-f format] [-r] [sql] [args]

DESCRIPTION

Teradata ships with very little Unix command line support other than the BTEQ tool. In particular, it lacks an interactive command prompt tool (like mysql for MySQL, psql for PostgreSQL, or vsql for Vertica). The tdsql program aims to fill that gap.

This program runs an SQL query against the Teradata data warehouse, and then sends the output of the query either to stdout, or to an output file. The SQL can be provided on the command line, to stdin, or interactively via a command prompt that supports readline command line editing. Database credentials can be provided on the command line, or in the initialization file ~/.tdsqlrc.

Command-Line Options

The following optional command-line arguments are accepted:

-h, --help

Display command line help and exit.

-H host, --hostname=host

Connect to this hostname (default localhost).

-u user, --username=user

Connect with this username (default your Unix username).

-p pass, --password=pass

Connect with this password (default is to prompt interactively for one).

-d database, --database=database

Connect initially to the given database (default is not in any database).

-c charset, --charset=charset

Specify character set; must be one of ASCII or UTF8

-m mode, --mode=mode

Specify mode; must be one of ANSI or TERADATA

-o file, --output=file

Write output to this file (default is to write to stdout).

-f format, --format=format

Write output in text (tab-separated, the default), csv (comma-separated), vbar (pipe-separated), box pretty-printed boxed format (this is the slowest output format, as all output must be buffered before any output is printed), or vertical for vertical rows (like MySQL with \G).

-r, --header

Include a header row with text, csv, or vbar output. If a format other than text, csv, or vbar is specified, the header argument is ignored.

The last optional command line arguments are the SQL to run, as a single string; and any arguments to pass to the SQL, if the SQL contains question mark (?) positional placeholders. The default is to prompt for SQL interactively using a command line prompt, if stdin is a tty, or read stdin as verbatim SQL, if stdin is not a tty.

Initialization File

This script looks for a file ~/.tdsqlrc which is a file in YAML format that has the following structure (all contents optional):

hostname: I<host>
username: I<user>
password: I<pass>
database: I<database>
charset:  I<charset>
mode:     I<mode>

If the file is present, then any provided values are used as the default values for hostname, username, etc. This means you can avoid needing to continually repeat these from the command line. Note that if you record your password here, you should make sure the file has safe permissions (chmod 600 ~/.tdsqlrc).

INSTALLATION

You can install this software simply by moving the bin/tdsql program into your PATH (for example, in /usr/local/bin), and the man page in share/man/man1/tdsql.1 into your MANPATH (for example, in /usr/local/share/man/man1).

This software requires Perl (it is tested with Perl 5.12.3), and the following CPAN modules:

  • DBI

  • Term::ReadKey

  • Term::ReadLine::Gnu

  • Text::CSV_XS

It also relies on the DBD::Teradata module available here: http://www.presicient.com/tdatdbd/

That module in turn has these dependencies:

  • Crypt:ECB

  • Crypt::Rijndael

  • Digest::SHA1

EXAMPLES

% tdsql -H td -u johndoe

% echo 'SELECT col1, col2 FROM db1.table1' | tdsql -H td -u johndoe

% tdsql -o output.txt 'SELECT col1, col2 FROM db1.table1'

% tdsql -f box 'SELECT col1, col2 FROM db1.table1 WHERE col1 = ?' 'val1'

TODO

  • Box format should not need to buffer all rows before starting display.

  • Recover from database connection timeouts.

  • Basic interaction should still work even without Term::ReadLine::Gnu.

  • Fall back to using stty if Term::ReadKey is not installed.

AUTHOR

Andrew Ho <[email protected]>

SEE ALSO

https://github.com/groupon/tdsql

LICENSE

Copyright (c) 2012-2014, Groupon, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

Neither the name of GROUPON nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

tdsql's People

Contributors

asnadden avatar dbushong avatar koppenheim avatar richievos avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.