我需要将一个hive表从一个数据库移动到另一个数据库。我怎么能这样做?
答案 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)
如果表是分区的,那么基本上你可以将分区数据从旧表复制到新表并删除旧表。
use new_db;
在新数据库中创建新表:
Create Table table_name;
使用以下命令从旧表中插入新表中的数据:
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)
答案中提供了许多方法,但没有指导何时使用什么,
当目标是托管表时使用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 ] );
}
}
// ...
}
如果您只想更改一个简单的表名,但表的位置不会改变:
CREATE NEW_DB.TABLE table AS SELECT * FROM OLD_DB.TABLE;
DROP TABLE OLD_DB.TABLE;
使用CREATE LIKE和INSERT:
alter table old_database.table_a rename to new_database.table_a;