sábado, 22 de julio de 2023

Hive

 import javax.sql.DataSource;


import org.apache.hadoop.hive.jdbc.HiveConnection;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.datasource.DataSourceUtils;


@Configuration

public class HiveConfig {


    @Autowired

    private DataSource dataSource;


    @Bean

    public HiveConnection hiveConnection() throws Exception {

        return (HiveConnection) DataSourceUtils.getConnection(dataSource);

    }

}



import org.apache.hadoop.hive.jdbc.HiveConnection;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;


@Service

public class HiveService {


    @Autowired

    private HiveConnection hiveConnection;


    // Utiliza hiveConnection para ejecutar consultas y operaciones en Hive.

    // Por ejemplo:

    // public void executeQuery(String query) {

    // // ...

    // }


    // Otros métodos y lógica de negocio

}


import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;


public class InsertXmlAsBinary {


    public static void main(String[] args) {

        String xmlFilePath = "/ruta/al/archivo.xml";

        String tableName = "mi_tabla";


        try {

            byte[] xmlBytes = Files.readAllBytes(Paths.get(xmlFilePath));

            insertXmlAsBinary(xmlBytes, tableName);

            System.out.println("Archivo XML insertado como binario en Hive.");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }


    public static void insertXmlAsBinary(byte[] xmlBytes, String tableName) {

        String jdbcURL = "jdbc:hive2://localhost:10000/default";

        String username = "your_username";

        String password = "your_password";


        try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {

            String insertQuery = "INSERT INTO " + tableName + " (xml_data) VALUES (?)";

            PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);

            preparedStatement.setBytes(1, xmlBytes);

            preparedStatement.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}


beeline -u jdbc:hive2://localhost:10000/default -n your_username -p your_password



LOAD DATA LOCAL INPATH '/ruta/al/archivo.xml' INTO TABLE mi_tabla;


INSERT INTO mi_tabla VALUES (1, 'Juan', 30);


COMMIT;


CREATE TABLE mi_tabla_temp (id INT, nombre STRING, edad INT);

INSERT INTO mi_tabla_temp VALUES (1, 'Juan', 31);


INSERT OVERWRITE TABLE mi_tabla

SELECT id, nombre, edad FROM mi_tabla_temp;


Con participación

-- Crear una tabla temporal con los nuevos datos

CREATE TABLE mi_tabla_temp (fecha STRING, columna1 INT, columna2 STRING);

INSERT INTO mi_tabla_temp VALUES ('2023-07-31', 100, 'Nuevo valor');


-- Sobrescribir la partición existente con los nuevos datos

INSERT OVERWRITE TABLE mi_tabla PARTITION (fecha='2023-07-31')

SELECT columna1, columna2 FROM mi_tabla_temp;


Con join 

-- Actualizar los valores de la columna2 en la partición correspondiente a la fecha '2023-07-31'

INSERT OVERWRITE TABLE mi_tabla PARTITION (fecha='2023-07-31')

SELECT

    t.columna1,

    CASE

        WHEN t.fecha = '2023-07-31' THEN tmp.columna2_actualizada

        ELSE t.columna2

    END AS columna2,

    t.columna3 -- Suponiendo que hay más columnas en la tabla original

FROM

    mi_tabla t

LEFT JOIN

    mi_tabla_temp tmp

ON

    t.fecha = tmp.fecha;


Particiones

CREATE TABLE mi_tabla (

  columna1 INT,

  columna2 STRING,

  columna3 STRING

)

PARTITIONED BY (columna2 STRING, columna3 STRING);


ALTER TABLE mi_tabla ADD PARTITION (columna2='valor1');

ALTER TABLE mi_tabla ADD PARTITION (columna2='valor2');

-- Agrega más particiones si es necesario


INSERT INTO TABLE mi_tabla PARTITION (columna2='valor1') VALUES (1);

INSERT INTO TABLE mi_tabla PARTITION (columna2='valor2') VALUES (2);


-- Actualizar el valor de columna1 en la partición 'valor1'

INSERT OVERWRITE TABLE mi_tabla PARTITION (columna2='valor1') VALUES (10);


-- Insertar nuevos datos en una partición existente

INSERT INTO TABLE mi_tabla PARTITION (columna2='valor2') VALUES (3);


-- Insertar nuevos datos en una nueva partición

INSERT INTO TABLE mi_tabla PARTITION (columna2='valor3') VALUES (4);


CREATE TABLE tabla_principal (

  id INT,

  columna_actualizable STRING

)

PARTITIONED BY (columna2 STRING);


CREATE TABLE tabla_actualizacion (

  id INT,

  nueva_columna_actualizable STRING

);


Eliminate

CREATE TABLE mi_tabla_nueva AS

SELECT *

FROM mi_tabla

WHERE columna_eliminable <> 'valor_a_eliminar';


INSERT OVERWRITE TABLE mi_tabla

SELECT * FROM mi_tabla_nueva;





Hola, gracias por visitar mi blog. Espero tu aportación.

0 comentarios:

Publicar un comentario