将hive表从一个数据库传输到另一个数据库

时间:2014-04-21 21:43:42

标签: hive hiveql

我需要将一个hive表从一个数据库移动到另一个数据库。我怎么能这样做?

8 个答案:

答案 0 :(得分:56)

从0.14开始,您可以使用以下语句将表从一个数据库移动到同一个Metastore中的另一个数据库:

use old_database;
alter table table_a rename to new_database.table_a

如果table_a是托管表,上述语句也会移动hdfs上的表数据。

答案 1 :(得分:3)

创建外部表new_db.table,如old_db.table location'(hdfs文件中的文件路径)';

如果你在表中有分区,那么你必须在new_db.table中添加分区。

答案 2 :(得分:3)

您可以尝试 - CTAS

USE NEW_DB;

CREATE TABLE table
AS
SELECT * FROM OLD_DB.table;

DROP TABLE OLD_DB.table;

答案 3 :(得分:1)

如果表是分区的,那么基本上你可以将分区数据从旧表复制到新表并删除旧表。

  1. use new_db;
  2. 在新数据库中创建新表:

    Create Table table_name;
    
  3. 使用以下命令从旧表中插入新表中的数据:

    insert into new_table_name partition (partition_column='value') 
      select col1, col2, col3, col4 from old_db.old_table_name 
      where partition_column='value';
    

答案 4 :(得分:1)

这可能对您有所帮助。

EXPORT TABLE table_or_partition TO hdfs_path;
IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION[table_location]];

一些示例语句如下所示:

EXPORT TABLE <table name> TO 'location in hdfs';

Use test_db;
IMPORT FROM 'location in hdfs';

Export Import can be appled on a partition basis as well:
EXPORT TABLE <table name> PARTITION (loc="USA") to 'location in hdfs';

以下导入命令导入外部表而不是托管表

IMPORT EXTERNAL TABLE FROM 'location in hdfs' LOCATION ‘/location/of/external/table’;

答案 5 :(得分:0)

要迁移它的数据库会为您提供数据库连接器。在sqoop和数据库连接器的帮助下,您可以迁移它。如果您更具体地了解要将数据迁移到

的数据库类型,那将会很棒

答案 6 :(得分:0)

https://issues.apache.org/jira/browse/HIVE-2496

改善仍然是开放的。我知道它在Impala中是可能的,而不是目前在Hive中。

发展似乎停滞不前。您可以在该页面上对该问题进行投票,以引起一些注意。

答案 7 :(得分:0)

答案中提供了许多方法,但没有指导何时使用什么,

  1. 当目标是托管表时使用CTAS:

    <?php
    class WP_User {
        // ...
            /**
             * @static
             * @since 3.3.0
             * @access private
             * @var array
             */
            private static $back_compat_keys;
    
            public function __construct( $id = 0, $name = '', $blog_id = '' ) {
                    if ( ! isset( self::$back_compat_keys ) ) {
                            $prefix = $GLOBALS['wpdb']->prefix;
                            self::$back_compat_keys = array(
                                    'user_firstname' => 'first_name',
                                    'user_lastname' => 'last_name',
                                    'user_description' => 'description',
                                    'user_level' => $prefix . 'user_level',
                                    $prefix . 'usersettings' => $prefix . 'user-settings',
                                    $prefix . 'usersettingstime' => $prefix . 'user-settings-time',
                            );
                    }
    
                    // ...
            }
    
            // ...
    
            /**
             * Magic method for accessing custom fields.
             *
             * @since 3.3.0
             * @access public
             *
             * @param string $key User meta key to retrieve.
             * @return mixed Value of the given user meta key (if set). If `$key` is 'id', the user ID.
             */
            public function __get( $key ) {
                    // ...
    
                    if ( isset( $this->data->$key ) ) {
                            $value = $this->data->$key;
                    } else {
                            if ( isset( self::$back_compat_keys[ $key ] ) )
                                    $key = self::$back_compat_keys[ $key ];
                            $value = get_user_meta( $this->ID, $key, true );
                    }
    
                    // ...
    
                    return $value;
            }
    
            /**
             * Magic method for setting custom user fields.
             *
             * This method does not update custom fields in the database. It only stores
             * the value on the WP_User instance.
             *
             * @since 3.3.0
             * @access public
             *
             * @param string $key   User meta key.
             * @param mixed  $value User meta value.
             */
            public function __set( $key, $value ) {
                    if ( 'id' == $key ) {
                            _deprecated_argument( 'WP_User->id', '2.1.0',
                                    sprintf(
                                            /* translators: %s: WP_User->ID */
                                            __( 'Use %s instead.' ),
                                            '<code>WP_User->ID</code>'
                                    )
                            );
                            $this->ID = $value;
                            return;
                    }
    
                    $this->data->$key = $value;
            }
    
            /**
             * Magic method for unsetting a certain custom field.
             *
             * @since 4.4.0
             * @access public
             *
             * @param string $key User meta key to unset.
             */
            public function __unset( $key ) {
                    // ...
    
                    if ( isset( $this->data->$key ) ) {
                            unset( $this->data->$key );
                    }
    
                    if ( isset( self::$back_compat_keys[ $key ] ) ) {
                            unset( self::$back_compat_keys[ $key ] );
                    }
            }
    
            // ...
    }
    
  2. 如果您只想更改一个简单的表名,但表的位置不会改变:

    CREATE NEW_DB.TABLE table AS SELECT * FROM OLD_DB.TABLE;
    DROP TABLE OLD_DB.TABLE;
    
  3. 使用CREATE LIKE和INSERT:

    alter table old_database.table_a rename to new_database.table_a;