
////
  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.
////


Controlling the Output Format
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include::output-formatting.txt[]

The following arguments allow you to control the output format of
records:

include::output-formatting-args.txt[]

For example, we may want to separate records by tab characters, with
every record surrounded by "double quotes", and internal quote marks
escaped by a backslash (+\+) character:

----
$ sqoop --connect jdbc:mysql://database.example.com/employees \
  --table employee_names --fields-terminated-by \t \
  --lines-terminated-by \n --enclosed-by '\"' --escaped-by '\\'
----

