<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">

<document>
  <header>
    <title>Overview </title>
  </header>
  <body>
      <p>The Pig Documentation provides the information you need to get started using Pig. If you haven't already, download Pig now: <a href="http://pig.apache.org/releases.html#Download"/>.</p>
      
      <p>Begin with the <a href="start.html">Getting Started</a> guide which shows you how to set up Pig and how to form simple Pig Latin statements.
      When you are ready to start writing your own scripts, review the <a href="basic.html">Pig Latin Basics</a> manual to 
        become familiar with the Pig Latin operators and the supported data types.</p>
        
      <p>Functions can be a part of almost every operator in Pig. The <a href="func.html">Built In Functions</a> guide describes Pig's built in functions.  
       The <a href="udf.html">User Defined Functions</a> manual shows you how to how to write your own functions and how to access/contribute functions using the Piggy Bank repository.</p>
       
       <p>The mechanisms featured in the <a href="cont.html">Control Structures</a> guide give you greater control over how your Pig scripts are structured and executed. The <a href="cont.html">Performance and Efficiency</a> guide provides valuable examples and suggestions for optimizing your code.</p>
       
       <p>Use Pig's Administration features <a href="admin.html">Administration</a> which provides properties that could be set to be used by all your users.</p>
       
       <p>Finally, use Pig's <a href="cmds.html">Shell and Utility Commands</a> to run your programs and Pig's expanded <a href="test.html">Testing and Diagnostics</a> tools to examine and/or debug your programs.</p>
      
      <p>If you have more questions, you can ask on the <a href="http://hadoop.apache.org/pig/mailing_lists.html">Pig Mailing Lists</a>.</p>
  </body>
</document>
