
////
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
////


+sqoop-codegen+
---------------


Purpose
~~~~~~~

include::codegen-purpose.txt[]

Syntax
~~~~~~

----
$ sqoop codegen (generic-args) (codegen-args)
$ sqoop-codegen (generic-args) (codegen-args)
----

Although the Hadoop generic arguments must preceed any codegen arguments,
the codegen arguments can be entered in any order with respect to one
another.


include::common-args.txt[]

include::codegen-args.txt[]

include::output-args.txt[]

include::input-args.txt[]

include::hive-args.txt[]

If Hive arguments are provided to the code generation tool, Sqoop
generates a file containing the HQL statements to create a table and
load data.

Example Invocations
~~~~~~~~~~~~~~~~~~~

Recreate the record interpretation code for the +employees+ table of a
corporate database:

----
$ sqoop codegen --connect jdbc:mysql://db.example.com/corp \
    --table employees
----


