SQL, linux y python Flashcards

1
Q

Supón que tienes una tabla employees(emp_id, name, department, salary, hire_date).

Obtener los nombres de empleados que trabajan en el departamento “IT” y ganan más de 50000 €:

SELECT name
FROM employees
WHERE ___________;

A) department = ‘IT’ AND salary > 50000
B) department IN (‘IT’) OR salary >= 50000
C) department = IT AND salary > ‘50000’
D) department == ‘IT’ AND salary > 50000

A

A

department = ‘IT’ AND salary > 50000

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué instrucción SQL crea un índice sobre la columna hire_date?

A) CREATE INDEX idx_hire ON employees(hire_date);
B) ADD INDEX employees.hire_date;
C) INDEX TABLE employees BY hire_date;
D) NEW INDEX hire_date_idx ON employees;

A

A

CREATE INDEX idx_hire ON employees(hire_date);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Cómo contarías cuántos empleados hay en cada departamento?

A) SELECT department, COUNT(*) AS total
FROM employees
GROUP BY department;

B) SELECT department, COUNT(emp_id)
WHERE GROUP BY department;

C) SELECT COUNT(emp_id) FROM employees GROUP department;

D) SELECT department, SUM(*) FROM employees;

A

A

SELECT department, COUNT(*) AS total
FROM employees
GROUP BY department;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Añadir un nuevo registro con id101, nombre “Ana Pérez”, departamento “HR”, salario 42000 € y fecha de alta ‘2025-03-15’:

a) INSERT INTO employees VALUES (101, ‘Ana Pérez’, ‘HR’, 42000, ‘2025-03-15’);

b) INSERT employees (emp_id,name,…) VALUES …;

c) CREATE employees VALUES (…);

d) ADD RECORD employees (…);

A

A

INSERT INTO employees VALUES (101, ‘Ana Pérez’, ‘HR’, 42000, ‘2025-03-15’);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Cuál es la cláusula para eliminar todos los empleados contratados antes de 2010?

A) DELETE FROM employees WHERE hire_date < ‘2010-01-01’;

B) REMOVE * FROM employees BEFORE 2010;

C) DROP employees WHERE hire_date < 2010;

D) DELETE employees ALL hire_date < ‘2010’;

A

A

DELETE FROM employees WHERE hire_date < ‘2010-01-01’;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Qué salida produce este código?

def func(x):
return [i**2 for i in range(x) if i % 2 == 0]

print(func(6))

A) [0, 4, 16, 36]
B) [0, 4, 16]
C) [1, 9, 25]
D) [2, 4, 6]

A

B

[0, 4, 16]

Función func(x)

Recibe un número x como entrada.

Utiliza una comprensión de lista para generar una lista con los cuadrados de ciertos números.

Comprensión de lista [i**2 for i in range(x) if i % 2 == 0]

range(x): Genera números desde 0 hasta x-1. En este caso, range(6) produce [0, 1, 2, 3, 4, 5].

if i % 2 == 0: Filtra solo los números que son pares (i divisible entre 2).

i**2: Eleva al cuadrado cada número par de la lista filtrada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Cómo manejarías una excepción genérica en Python?

A) try:

except Exception as e:

B) catch Exception as e:

C) try:

except:

finally:

D) Ambas A y C son correctas

A

D

Ambas A y C son correctas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Cuál es el tipo de dato de {“a”: 1, “b”: 2}?

A) List
B) Tuple
C) Dict
D) Set

A

C

Dict

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Selecciona la forma correcta de abrir un archivo y leer todas sus líneas:

A) f = open(‘data.txt’, ‘r’)
lines = f.readlines()
f.close()

B) with open(‘data.txt’) as f:
lines = f.read()

C) lines = open(‘data.txt’, ‘r’).read().split(‘\n’)

D) D) Todas son válidas, pero la más “pythónica” es la opción A

A

A

f = open(‘data.txt’, ‘r’)
lines = f.readlines()
f.close()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Qué comando muestra el contenido de un directorio, incluyendo archivos ocultos, en formato largo (detallado)?

A) ls -l
B) ls -a
C) ls -la
D) dir -l

A

C

ls -la

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Para buscar la palabra “error” en todos los archivos .log de la carpeta actual, usarías:

A) grep error .log
B) find . -name “
.log” | grep error
C) grep -r error ./*.log
D) Todas son correctas

A

D

Todas son correctas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Cómo cambiar los permisos de un archivo script.sh para hacerlo ejecutable?

A) chmod +x script.sh
B) chmod 777 script.sh
C) chown script.sh +x
D) setperm script.sh executable

A

A

chmod +x script.sh

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Qué hace el siguiente pipe?

cat access.log | awk ‘{print $1}’ | sort | uniq -c

A) Cuenta cuántas veces aparece cada IP (suponiendo que está en la primera columna)

B) Filtra líneas con errores

C) Busca patrones en un log remoto

D) Borra líneas duplicadas

A

A

Cuenta cuántas veces aparece cada IP (suponiendo que está en la primera columna)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Qué comando sirve para moverte al directorio padre (nivel superior)?

A) cd ..
B) cd /
C) cd ~
D) mv ..

A

A

cd ..

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Qué hace lambda x: x*2?

A) Crea una función anónima que duplica su argumento
B) Duplica todos los elementos de una lista
C) Aplica map a una función
D) No es válido en Python

A

A

Crea una función anónima que duplica su argumento

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Cuál es el propósito de la declaración SELECT en SQL?

a) Insertar datos en una tabla
b) Actualizar datos en una tabla
c) Recuperar datos de una tabla
d) Eliminar datos de una tabla

A

C

Recuperar datos de una tabla

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Qué palabra clave de SQL se utiliza para ordenar el conjunto de resultados?

a) ORDER BY
b) SORT
c) GROUP BY
d) FILTER

A

A

ORDER BY

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

¿Qué hace la siguiente consulta SQL?
SELECT * FROM employees WHERE salary > 50000;

a) Selecciona todos los empleados con salario menor que 50000
b) Selecciona todos los empleados con salario mayor que 50000
c) Selecciona todos los empleados con salario igual a 50000
d) Selecciona todos los empleados sin importar el salario

A

B

Selecciona todos los empleados con salario mayor que 50000

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

¿Qué tipo de join devuelve todos los registros cuando hay una coincidencia en cualquiera de las tablas izquierda o derecha?

a) INNER JOIN
b) LEFT JOIN
c) RIGHT JOIN
d) FULL OUTER JOIN

A

D

FULL OUTER JOIN

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Cuál es la función de la cláusula GROUP BY?

a) Filtrar registros
b) Ordenar registros
c) Agrupar registros basados en una o más columnas
d) Unir tablas

A

C

Agrupar registros basados en una o más columnas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

¿Cuál es la salida del siguiente código?

print(type([]) is list)

a) True
b) False
c) Error
d) None

A

A

True

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

¿Cuál de los siguientes no es un tipo de datos incorporado en Python?

a) List
b) Dictionary
c) Tuple
d) StringBuffer

A

D

StringBuffer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

¿Cómo se inserta un elemento en una posición específica en una lista?

a) list.add(index, element)
b) list.insert(index, element)
c) list.append(element, index)
d) list.set(index, element)

A

B

list.insert(index, element)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

¿Qué hace el siguiente código?

def func(x, y=5):
return x + y
print(func(3))

a) Devuelve 8
b) Devuelve 3
c) Devuelve 5
d) Genera un error

A

A

Devuelve 8

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
¿Qué palabra clave se utiliza para manejar excepciones en Python? a) try b) except c) catch d) throw
B except
26
¿Qué comando se utiliza para listar archivos en un directorio? a) dir b) ls c) list d) show
B ls
27
¿Qué hace el comando pwd? a) Imprime el directorio de trabajo b) Cambia de directorio c) Crea un nuevo directorio d) Elimina un directorio
A Imprime el directorio de trabajo
28
¿Cómo se crea un nuevo archivo llamado "test.txt"? a) create test.txt b) new test.txt c) touch test.txt d) make test.txt
C touch test.txt
29
¿Qué comando se utiliza para eliminar un directorio vacío? a) rm b) rmdir c) del d) remove
B rmdir
30
¿Cuál es el propósito del comando chmod? a) Cambiar permisos de archivo b) Cambiar propiedad de archivo c) Cambiar de directorio d) Verificar uso de memoria
A Cambiar permisos de archivo
31
¿Cuál de las siguientes consultas SQL devuelve el número total de clientes agrupados por país, ordenados de mayor a menor cantidad? A) SELECT country, COUNT(*) FROM customers GROUP BY country; B) SELECT country, COUNT(*) AS total FROM customers ORDER BY total; C) SELECT country, COUNT(*) AS total FROM customers GROUP BY country ORDER BY total DESC; D) SELECT COUNT(*), country FROM customers ORDER BY COUNT(*);
C SELECT country, COUNT(*) AS total FROM customers GROUP BY country ORDER BY total DESC;
32
¿Qué hace la siguiente consulta SQL? SELECT department, AVG(salary) as avg_salary FROM employees WHERE hire_date > '2022-01-01' GROUP BY department HAVING AVG(salary) > 50000; A) Muestra todos los departamentos con sus salarios promedio B) Muestra los departamentos donde el salario promedio es mayor a 50000, considerando solo empleados contratados después del 1 de enero de 2022 C) Cuenta el número de empleados por departamento con salario mayor a 50000 D) Lista los empleados con salario mayor a 50000 agrupados por departamento
B Muestra los departamentos donde el salario promedio es mayor a 50000, considerando solo empleados contratados después del 1 de enero de 2022
33
En BigQuery, ¿cuál es la sintaxis correcta para consultar una tabla particionada por fecha? A) SELECT * FROM dataset.table WHERE _PARTITIONDATE = '2023-01-01' B) SELECT * FROM dataset.table PARTITION(20230101) C) SELECT * FROM dataset.table WHERE _PARTITION_TIME = TIMESTAMP('2023-01-01') D) SELECT * FROM dataset.table@{partition='2023-01-01'}
C SELECT * FROM dataset.table WHERE _PARTITION_TIME = TIMESTAMP('2023-01-01')
34
¿Qué tipo de JOIN devuelve todas las filas de la tabla izquierda y las coincidentes de la tabla derecha? A) INNER JOIN B) RIGHT JOIN C) LEFT JOIN D) FULL JOIN
C LEFT JOIN
35
¿Cuál de los siguientes es un ejemplo válido de una subconsulta en SQL? A) SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE amount > 1000); B) SELECT name FROM customers WHERE EXISTS (SELECT FROM orders); C) SELECT name FROM customers INNER JOIN (SELECT * FROM orders); D) SELECT name FROM customers WHERE id = SUBQUERY(SELECT customer_id FROM orders);
A SELECT name FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE amount > 1000);
36
En el contexto de BigQuery, ¿qué hace la función UNNEST? A) Elimina valores duplicados de una columna B) Convierte un array en filas individuales C) Combina múltiples tablas en una sola D) Desnormaliza datos estructurados
B Convierte un array en filas individuales
37
¿Cuál de las siguientes sentencias crea una vista materializada en BigQuery? A) CREATE MATERIALIZED VIEW my_view AS SELECT * FROM my_table; B) CREATE VIEW my_view AS SELECT * FROM my_table WITH MATERIALIZATION; C) CREATE MATERIALIZED VIEW my_view OPTIONS(enable_refresh=true) AS SELECT * FROM my_table; D) CREATE VIEW my_view WITH (MATERIALIZED=true) AS SELECT * FROM my_table;
C CREATE MATERIALIZED VIEW my_view OPTIONS(enable_refresh=true) AS SELECT * FROM my_table;
38
¿Qué módulo de Python se utiliza comúnmente para el análisis de datos y manipulación de estructuras tabulares? A) numpy B) pandas C) matplotlib D) scikit-learn
B pandas
39
En el contexto de procesamiento de datos con Python, ¿qué hace el siguiente código? Import pandas as pd df = pd.read_csv('datos.csv') result = df.groupby('categoria').agg({'ventas': 'sum', 'clientes': 'count'}) A) Lee un archivo CSV y cuenta el número total de categorías B) Lee un archivo CSV y agrupa los datos por la columna 'categoria', sumando 'ventas' y contando 'clientes' para cada grupo C) Lee un archivo CSV y elimina las filas con categorías duplicadas D) Lee un archivo CSV y calcula la media de ventas y clientes por categoría
B Agrupa por categoría, suma ventas y cuenta clientes
40
¿Cuál de estas opciones es la forma correcta de abrir un archivo en Python asegurando que se cierre automáticamente después de su uso? A) file = open('data.txt', 'r'); data = file.read(); file.close() B) with open('data.txt', 'r') as file: data = file.read() C) file = open('data.txt'); try: data = file.read() finally: file.close() D) from contextlib import closing; with closing(open('data.txt')) as f: data = f.read()
B with open('data.txt', 'r') as file: data = file.read()
41
En el contexto de Google Cloud, ¿qué biblioteca de Python se utiliza para interactuar con BigQuery? A) google-cloud-bigquery B) google-cloud-storage C) google-cloud-pubsub D) google-cloud-dataflow
A google-cloud-bigquery
42
¿Qué hace el siguiente código Python? def process_data(data): return {k: v for k, v in data.items() if v > 100} A) Devuelve un nuevo diccionario con todos los elementos de 'data' B) Devuelve un nuevo diccionario con elementos de 'data' donde el valor es mayor que 100 C) Modifica 'data' eliminando elementos con valor menor a 100 D) Cuenta cuántos valores en 'data' son mayores que 100
B Filtra diccionario conservando valores >100
43
¿Cuál es la forma correcta de definir una función asíncrona en Python para trabajar con operaciones de entrada/salida? A) def process_data(data): yield from data B) async def process_data(data): await operation(data) C) def process_data(data, callback): callback(data) D) @asyncio process_data(data): return data
B async def process_data(data): await operation(data)
44
Al trabajar con Google Cloud Dataflow y Apache Beam en Python, ¿qué permite crear un pipeline de procesamiento? A) beam.Pipeline() B) dataflow.create_pipeline() C) google.cloud.Pipeline() D) apache.beam.workflow()
A beam.Pipeline()
45
¿Qué comando se utilizaría para ver el espacio libre en disco en un sistema Linux? A) disk-free B) free C) du D) df
D df
46
¿Cómo rediriges la salida de un comando a un archivo, sobrescribiendo su contenido si ya existe? A) comando > archivo B) comando >> archivo C) comando | archivo D) comando << archivo
A comando > archivo
47
¿Qué comando muestra los procesos en ejecución en un sistema Linux? A) list B) ps C) procs D) tasks
B ps
48
En un sistema de archivos Linux, ¿qué permisos representa el modo "644"? A) El propietario tiene permisos de lectura y escritura, el grupo y otros solo lectura B) El propietario tiene todos los permisos, el grupo y otros ninguno C) Todos tienen permisos de lectura y escritura D) El propietario y el grupo tienen permisos de lectura y escritura, otros solo lectura
A Propietario: lectura+escritura (6), grupo/otros: solo lectura (4)
49
¿Qué comando usarías para buscar archivos que contengan la palabra "error" en el directorio actual y sus subdirectorios? A) find . -name "error" B) grep -r "error" . C) locate error D) search -p "error"
B grep -r "error" .
50
En el contexto de Google Cloud, ¿qué comando se utiliza para inicializar la CLI de Google Cloud? A) gcloud init B) gcloud start C) gcloud setup D) gcloud login
A gcloud init
51
¿Qué significa el símbolo | (pipe) en los comandos de la shell de Linux? A) Es un operador lógico OR B) Redirecciona la salida estándar a un archivo C) Conecta la salida de un comando a la entrada de otro D) Ejecuta comandos en segundo plano
C Conecta la salida de un comando a la entrada de otro
52
¿Qué comando usarías para establecer una variable de entorno temporal en Linux? A) set VARIABLE=valor B) env VARIABLE=valor C) export VARIABLE=valor D) variable VARIABLE=valor
C export VARIABLE=valor
53
¿Qué consulta SQL seleccionarías para obtener el nombre y el precio de todos los productos de la categoría 'Electrónica'? a) SELECT Nombre, Precio FROM Productos WHERE Categoria = 'Electrónica'; b) SELECT * FROM Productos WHERE Categoria = 'Electrónica'; c) GET Nombre, Precio FROM Productos WHERE Categoria IS 'Electrónica'; d) SELECT Nombre, Precio IN Productos WHERE Categoria = 'Electrónica';
A SELECT Nombre, Precio FROM Productos WHERE Categoria = 'Electrónica'; (Selecciona las columnas específicas Nombre y Precio y filtra por Categoria).
54
¿Cuál de las siguientes consultas cuenta cuántos productos hay en total en la tabla Productos? a) COUNT(*) FROM Productos; b) SELECT COUNT(ID) FROM Productos; c) SELECT ALL FROM Productos; d) SELECT SUM(Stock) FROM Productos;
B SELECT COUNT(ID) FROM Productos; (La función COUNT() cuenta filas. COUNT(*) también funcionaría. COUNT(ID) es específico para contar productos basándose en su identificador único).
55
Imagina que tienes otra tabla llamada Pedidos con columnas PedidoID, ProductoID (clave foránea referenciando Productos.ID), Cantidad. ¿Qué tipo de cláusula usarías para combinar la tabla Productos y Pedidos y obtener el nombre del producto junto con la cantidad pedida? a) GROUP BY b) ORDER BY c) WHERE d) JOIN
D JOIN (La cláusula JOIN se usa para combinar filas de dos o más tablas basándose en una columna relacionada entre ellas).
56
¿Qué consulta usarías para encontrar el precio promedio de todos los productos? a) SELECT MEDIAN(Precio) FROM Productos; b) SELECT AVG(Precio) FROM Productos; c) SELECT MEAN(Precio) FROM Productos; d) SELECT SUM(Precio) / COUNT(Precio) FROM Productos;
B SELECT AVG(Precio) FROM Productos; (La función de agregación AVG() calcula el valor promedio de una columna numérica).
57
Quieres ver todos los productos ordenados por precio, del más caro al más barato. ¿Qué consulta utilizarías? a) SELECT * FROM Productos ORDER BY Precio ASC; b) SELECT * FROM Productos SORT BY Precio DESC; c) SELECT * FROM Productos ORDER BY Precio DESC; d) SELECT * FROM Productos GROUP BY Precio DESC;
C SELECT * FROM Productos ORDER BY Precio DESC; (ORDER BY ordena los resultados, y DESC especifica un orden descendente, de mayor a menor).
58
¿Cuál es el resultado del siguiente código Python? mi_lista = [1, 2, 3, 4, 5] print(mi_lista[1:3]) a) [1, 2] b) [1, 2, 3] c) [2, 3] d) [2, 3, 4]
C [2, 3] (El slicing [1:3] en Python extrae elementos desde el índice 1 hasta el índice 3 sin incluir el índice 3. Los índices son 0-based, por lo que son los elementos en las posiciones 1 y 2).
59
¿Qué estructura de datos en Python se utiliza típicamente para almacenar pares clave-valor? a) Lista (List) b) Tupla (Tuple) c) Conjunto (Set) d) Diccionario (Dictionary)
D Diccionario (Dictionary) (Los diccionarios almacenan datos en formato clave: valor).
60
¿Cuál es la sintaxis correcta para definir una función en Python llamada calcular_suma que toma dos argumentos a y b? a) function calcular_suma(a, b): b) def calcular_suma(a, b): c) define calcular_suma(a, b): d) def calcular_suma[a, b]:
B def calcular_suma(a, b): (La palabra clave def se usa para definir funciones en Python, seguida del nombre, paréntesis con los parámetros y dos puntos).
61
¿Qué imprimirá el siguiente código? x = 5 if x > 10: print("Mayor que 10") elif x > 3: print("Mayor que 3") else: print("Menor o igual a 3") a) Mayor que 10 b) Mayor que 3 c) Menor o igual a 3 d) No imprimirá nada
B Mayor que 3 (La primera condición x > 10 es falsa (5 no es > 10). La segunda condición elif x > 3 es verdadera (5 es > 3), por lo que se ejecuta su bloque y se detiene la evaluación).
62
¿Qué hace el siguiente código? numeros = [1, 2, 3, 4, 5] cuadrados = [] for num in numeros: cuadrados.append(num * num) print(cuadrados) a) Imprime la lista [1, 2, 3, 4, 5]. b) Imprime la lista [1, 4, 9, 16, 25]. c) Genera un error. d) Imprime la lista [2, 4, 6, 8, 10].
B Imprime la lista [1, 4, 9, 16, 25] (El bucle for itera sobre numeros, calcula el cuadrado de cada num y lo añade a la lista cuadrados).
63
¿Qué comando se utiliza para listar el contenido de un directorio en Linux? a) dir b) list c) ls d) show
C ls (ls es el comando estándar en Linux para listar el contenido del directorio actual o uno especificado).
64
Estás en el directorio /home/usuario/documentos. ¿Qué comando usarías para moverte al directorio /home/usuario? a) cd /home/usuario b) cd .. c) cd . d) Cualquiera de las opciones a) o b) es válida.
D Cualquiera de las opciones a) o b) es válida. (cd /home/usuario va directamente a esa ruta absoluta. cd .. sube un nivel en la jerarquía de directorios, desde /home/usuario/documentos a /home/usuario).
65
¿Qué comando usarías para crear un nuevo directorio llamado proyecto_datos? a) create dir proyecto_datos b) newdir proyecto_datos c) mkdir proyecto_datos d) mk dir proyecto_datos
C mkdir proyecto_datos (mkdir significa "make directory" y es el comando para crear directorios).
66
¿Qué comando se utiliza para mostrar el contenido de un archivo de texto llamado config.txt en la terminal? a) type config.txt b) cat config.txt c) open config.txt d) display config.txt
B cat config.txt (cat (concatenate) se usa comúnmente para mostrar el contenido de archivos pequeños directamente en la terminal).
67
¿Qué comando usarías para buscar todas las líneas que contienen la palabra "error" dentro del archivo log.txt? a) find "error" log.txt b) search "error" in log.txt c) cat log.txt | find "error" d) grep "error" log.txt
D grep "error" log.txt (grep es una potente utilidad para buscar patrones de texto (como "error") dentro de archivos).
68
¿Qué significa WHERE en una consulta SQL? A) Especifica las columnas a seleccionar B) Especifica las condiciones para filtrar filas C) Especifica el orden de los resultados D) Especifica la tabla a modificar
B Especifica las condiciones para filtrar filas
69
¿Cuál es el resultado de SELECT COUNT(*) FROM tabla;? A) El número de columnas en la tabla B) El número total de filas en la tabla C) El número de filas que cumplen una condición D) El contenido de todas las filas en la tabla
B
70
¿Qué operador en Python se utiliza para comparar si dos valores son iguales? A) = B) == C) != D) <>
B ==
71
¿Qué función en Python se utiliza para imprimir texto en la consola? A) input() B) print() C) write() D) output()
B print()
72
¿Qué significa if __name__ == '__main__': en Python? A) Define una función principal B) Ejecuta el código solo si el archivo se ejecuta directamente C) Importa un módulo llamado main D) Declara una variable global llamada main
B Ejecuta el código solo si el archivo se ejecuta directamente
73
¿Qué comando de Linux se utiliza para listar los archivos y directorios en el directorio actual? A) cd B) ls C) pwd D) mkdir
B ls
74
¿Qué comando de Linux se utiliza para cambiar de directorio? A) ls B) cd C) pwd D) mv
B cd
75
¿Qué comando de Linux muestra la ruta completa del directorio actual? A) ls B) pwd C) cd D) echo
B pwd
76
¿Qué operador en SQL se utiliza para combinar filas de dos tablas? A) JOIN B) UNION C) MERGE D) GROUP BY
A JOIN
77
¿Qué significa chmod 755 archivo en Linux? A) Cambia el propietario del archivo B) Cambia los permisos del archivo C) Cambia el nombre del archivo D) Cambia la ubicación del archivo
B Cambia los permisos del archivo
78
¿Qué significa pip en Python? A) Es un gestor de paquetes para instalar bibliotecas B) Es un entorno de desarrollo integrado C) Es un módulo para manejar archivos D) Es una función para imprimir texto
A Es un gestor de paquetes para instalar bibliotecas
79
¿Qué comando en Linux se utiliza para mover o renombrar un archivo? A) mv B) cp C) rm D) touch
A mv
80
¿Qué significa import os en Python? A) Importa el módulo para manejar operaciones del sistema operativo B) Importa el módulo para manejar archivos de texto C) Importa el módulo para realizar cálculos matemáticos D) Importa el módulo para manejar bases de datos
A Importa el módulo para manejar operaciones del sistema operativo
81
¿Qué comando en Linux se utiliza para crear un nuevo directorio? A) mkdir B) touch C) rm D) ls
A mkdir
82
¿Qué tipo de lenguaje es Python?
Python es un lenguaje de programación de alto nivel.
83
Verdadero o Falso: Linux es un sistema operativo de código abierto.
Verdadero.
84
Completa la frase: En Python, las listas se definen utilizando __________.
corchetes.
85
Estás trabajando en un proyecto de ingeniería de datos que requiere versiones específicas de varias bibliotecas de Python. Necesitas asegurar que el entorno sea aislado y reproducible. ¿Qué pasos deberías seguir? A. Instalar todas las bibliotecas globalmente usando pip. B. Crear un entorno virtual usando venv, activarlo e instalar las bibliotecas requeridas. C. Escribir un archivo requirements.txt y compartirlo con tu equipo. D. Ambas, B y C.
D Ambas, B y C. Crear un entorno virtual con venv aísla las dependencias, y generar un requirements.txt asegura reproducibilidad, esencial para proyectos en GCP.
86
Tienes un archivo CSV grande con datos de ventas y necesitas limpiarlo y analizarlo con Python. ¿Qué biblioteca usarías principalmente y por qué? A. NumPy, porque es excelente para cálculos numéricos. B. Pandas, porque proporciona estructuras y funciones para manejar datos estructurados eficientemente. C. Matplotlib, porque se usa para visualización de datos. D. Scikit-learn, porque se usa para aprendizaje automático.
B Pandas, porque proporciona estructuras y funciones para manejar datos estructurados eficientemente. Pandas es ideal para manipular y analizar datos, como los CSV, en pipelines de datos.
87
En un script de Python, lees un archivo JSON con configuraciones para tu pipeline de datos, pero a veces el archivo puede faltar o estar corrupto. ¿Cómo deberías manejar esto para hacer tu script robusto? A. Asumir que el archivo siempre está presente y bien formateado. B. Usar un bloque try-except para capturar FileNotFoundError y JSONDecodeError, y proporcionar configuraciones predeterminadas o registrar un error. C. Comprobar si el archivo existe antes de leerlo, y si no, salir del script. D. Ambas, B y C.
B Usar un bloque try-except para capturar FileNotFoundError y JSONDecodeError, y proporcionar configuraciones predeterminadas o registrar un error. Esto asegura que el script maneje errores de manera elegante, crucial para pipelines en producción.
88
Necesitas extraer información de productos de un sitio web de comercio electrónico sin API. ¿Qué biblioteca de Python usarías para web scraping y cuál es una consideración clave? A. Requests, porque se usa para hacer solicitudes HTTP. B. BeautifulSoup, porque se usa para analizar documentos HTML y XML. C. Scrapy, porque es un framework poderoso para web scraping. D. Pandas, porque se usa para manipulación de datos.
C Scrapy, porque es un framework poderoso para web scraping. Scrapy es ideal para tareas complejas de scraping, pero debe usarse éticamente.
89
Para conectar a una base de datos MySQL desde un script de Python, ¿qué biblioteca usarías típicamente? A. sqlite3 B. mysql-connector-python o PyMySQL C. pandas D. numpy
B mysql-connector-python o PyMySQL Estas bibliotecas permiten conectar Python con MySQL, esencial para integrar bases de datos en pipelines de datos.
90
Necesitas escribir un script Bash que procese un archivo de registro grande, extraiga líneas con la palabra "error" y las guarde en un nuevo archivo. ¿Qué comando usarías? A. cat log.txt | grep "error" > errors.txt B. grep "error" log.txt > errors.txt C. Ambas, A y B D. Ninguna, A ni B
C Ambas, A y B Ambos comandos filtran líneas con "error" y redirigen la salida, útil para análisis de logs en ingeniería de datos.
91
En un pipeline de ingeniería de datos, necesitas automatizar la copia de seguridad de archivos importantes a un servidor remoto. ¿Qué comando Bash usarías para transferir archivos de forma segura vía SSH? A. cp B. scp C. rsync D. Ambas, B y C
D Ambas, B y C scp y rsync permiten transferencias seguras, ideales para backups en entornos como GCP.
92
Estás trabajando en un script que necesita comprobar si un directorio específico existe, y si no, crearlo. ¿Qué comando Bash usarías? A. if [ -d /path/to/directory ]; then mkdir /path/to/directory; fi B. if [ ! -d /path/to/directory ]; then mkdir /path/to/directory; fi C. mkdir /path/to/directory D. touch /path/to/directory
B if [ ! -d /path/to/directory ]; then mkdir /path/to/directory; fi Esto verifica si el directorio no existe y lo crea, evitando errores, útil para scripts de automatización.
93
¿Qué comandos Bash se pueden usar para ejecutar una consulta SQL en una base de datos MySQL y redirigir la salida a un archivo? A. mysql -u username -p database_name -e "SELECT * FROM table_name" > output.txt B. mysql database_name -e "SELECT * FROM table_name" > output.txt C. Ambas, A y B, dependiendo de cómo esté configurado MySQL D. Ninguna, necesitas usar otra herramienta
C Ambas, A y B, dependiendo de cómo esté configurado MySQL Ambos comandos funcionan con configuraciones adecuadas, esenciales para integrar SQL en scripts Bash.
94
Has ejecutado una consulta MySQL que devuelve un conjunto de resultados grande, y necesitas filtrar solo las filas donde una columna específica contiene un valor determinado. ¿Qué combinación de herramientas usarías en un script Bash? A. mysql y awk B. mysql y grep C. mysql y sed D. Todas las anteriores
D Todas las anteriores uedes usar mysql con awk, grep o sed para procesar datos, útil para manejar grandes conjuntos de datos en pipelines.
95
Que usamos para funciones, tuplas, listas, diccionarios y conjuntos? 1. parenteis 2. corchetes 3. llaves
Paréntesis para funciones y tuplas. Corchetes para listas y acceso a elementos. Llaves para diccionarios y conjuntos.
96
¿Qué comando genera un archivo requirements.txt con las versiones exactas de los paquetes instalados? a) pip list b) pip freeze c) pip --versions d) pip env export
B pip freeze
97
Al ejecutar python3 -m venv my_env, ¿qué directorio NO se crea dentro de my_env? a) bin/ b) lib/ c) include/ d) packages/
D packages
98
¿Qué ocurre si intentas instalar un paquete con pip install sin activar el entorno virtual? a) Se instala globalmente en el sistema b) Genera un error de permisos c) Crea automáticamente un nuevo entorno virtual d) Se instala en el directorio actual
A Se instala globalmente en el sistema
99
Dado el código: import bisect a = [1,2,4,5] print(bisect.bisect_left(a, 3)) ¿Cuál es la salida? a) 1 b) 2 c) 3 d) 4
B 2 La lista ordenada es [1, 2, 4, 5]. Queremos insertar el valor 3. El lugar correcto para meterlo sin romper el orden es antes del 4. Los índices de la lista son 0→1, 1→2, 2→4, 3→5. Por tanto, el índice de inserción es 2.
100
¿Qué método se ejecuta al llamar a str() en una instancia de clase? a) __format__() b) __str__() c) __repr__() d) __init__()
B __str__()
101
¿Qué comando fuerza la escritura de todos los buffers al disco? a) flush b) save c) sync d) buffer --write
C sync
102
Para configurar un router Linux, ¿qué parámetro del kernel debe habilitarse? a) net.ipv4.ip_forward b) net.ipv4.route c) kernel.routing d) sys.net.router
A net.ipv4.ip_forward
103
¿Qué herramienta se usa para inspeccionar reglas de firewall en sistemas modernos? a) iptables b) netfilter c) nftables d) firewalld
C nftables
104
Al ejecutar route -n, ¿qué información NO se muestra? a) Dirección IP del gateway b) Máscara de red c) Tabla ARP d) Interfaz de red
C Tabla ARP
105
¿Qué estructura se usa para manejar datos tabulares en Pandas? a) Series b) DataFrame c) Array d) Collection
B DataFrame
106
En un entorno virtual activo, ¿qué comando muestra solo los paquetes instalados localmente? a) pip list --local b) pip freeze --local c) pip env list d) pip show --packages
A pip list --local
107
2. ¿Qué hace el siguiente comando en Linux? find /home/user -type f -exec chmod 644 {} \; a) Cambia los permisos de todos los directorios a 644 b) Cambia los permisos de todos los archivos a 644 c) Cambia los permisos de todos los archivos a 755 d) Cambia los permisos de todos los archivos y directorios a 644
B Cambia los permisos de todos los archivos a 644
108
¿Cuál es la diferencia principal entre una lista y una tupla en Python? a) Las listas son inmutables y las tuplas mutables b) Las listas son mutables y las tuplas inmutables c) No hay diferencia d) Ambas son inmutables
B Las listas son mutables y las tuplas inmutables
109
¿Qué comando de Linux muestra el uso de disco de todos los subdirectorios del directorio actual, ordenados de mayor a menor tamaño? a) ls -lh b) du -sh * | sort -hr c) df -h d) ls -al
B du -sh * | sort -hr
110
¿Qué devuelve la siguiente consulta SQL? SELECT COUNT(DISTINCT department) FROM employees; a) El número total de empleados b) El número de departamentos únicos c) El número de empleados por departamento d) El número de empleados con departamento distinto
B El número de departamentos únicos
111
¿Qué hace el siguiente comando en Python? import sys sys.exit(0) a) Lanza una excepción b) Termina el programa con código de salida 0 c) Reinicia el script d) Imprime 0 en pantalla
B Termina el programa con código de salida 0
112
¿Qué comando de Linux muestra las últimas 100 líneas de un archivo en tiempo real? a) head -n 100 archivo.log b) tail -f archivo.log c) tail -n 100 -f archivo.log d) cat archivo.log
C tail -n 100 -f archivo.log
113
¿Qué hace el siguiente código en Python? a = [1, 2, 3] b = a b.append(4) print(a) a) [1,2,3] b) [1,2,3,4] c) [4] d) [4,1,2,3]
B [1,2,3,4] a = [1, 2, 3] # Creamos una lista en memoria b = a # b apunta al mismo objeto que a; no se crea copia b.append(4) # Modificamos el objeto apuntado por b (y por tanto también por a) print(a) # Imprime el contenido actual de la lista
114
Cuál es el comando correcto para buscar la palabra 'error' en todos los archivos de texto de un directorio y mostrar la línea y el nombre de archivo? a) grep error *.txt b) grep -Hn error *.txt c) find . -name "*.txt" | grep error d) cat *.txt | grep error
B grep -Hn error *.txt
115
¿Qué operador de Python se utiliza para desempaquetar listas en argumentos de función? a) * b) ** c) & d) #
A *
116
que devolvera esto? print('e' in 'Henry' )
TRUE
117
que hace esto ? Create a set set1 = {"value1", "value2", "value3"} Add new element set1.add("value4") print(set1) Set union set2 = {"value4", "value5", "value6"} set3 = set1 | set2 print(set3) Set intersection set4 = set1 & set2 print(set4) Set difference set5 = set1 - set2 print(set5)
Agregar un elemento (add()): Se añade "value4" a set1. Como los conjuntos no tienen un orden fijo, al imprimirlo, el contenido puede aparecer en diferente orden. Unión (|): Se crea set2 con valores {"value4", "value5", "value6"}. Luego, se crea set3 que contiene la unión de set1 y set2, combinando todos los elementos sin repetirlos. Intersección (&): Se crea set4, que contiene solo los elementos comunes entre set1 y set2. En este caso, "value4" es el único elemento compartido. Diferencia (-): Se crea set5, que contiene los elementos de set1 que no están en set2. Como "value4" está en ambos, se elimina de set5, quedando solo { "value1", "value2", "value3" }.
118
¿Qué devuelve una comprensión de lista? -Un único valor -Una Lista -Valores múltiples
una lista
119
¿A qué tipo de enunciado compuesto sustituye generalmente una comprensión de lista? - Bucle for -Declaración if -Bucle while
Bucle for
120
¿Cuál es el resultado de 'string' == "string"? - Falso - Verdadero
verdadero las comillas simples y dobles son equivalentes.
121
¿Cuál es el resultado de 'string' == "String"? - Falso - Verdadero
Falso se distingue entre mayusculas y minusculas
122
What is the primary purpose of Python?
Python is primarily used for web development, data analysis, artificial intelligence, scientific computing, and automation.
123
True or False: Python is a compiled language.
False: Python is an interpreted language.
124
Fill in the blank: In Python, a _______ is a way to store multiple items in a single variable.
list
125
Which of the following is a valid way to define a function in Python? (a) def myFunction(): (b) function myFunction() {} (c) create myFunction()
a) def myFunction():
126
What is the output of the following code: print(type(3.14))?
127
¿Qué SDK se utiliza principalmente para crear pipelines en Google Cloud Dataflow con Python? A) TensorFlow B) PyTorch C) Apache Beam D) Scikit-learn
C Apache Beam Apache Beam es el modelo de programación open-source utilizado para definir pipelines de procesamiento de datos en paralelo, tanto por lotes como en tiempo real. Es la base de Google Cloud Dataflow, y su SDK para Python es esencial para crear pipelines en este servicio.
128
¿Cuál es el parámetro que se utiliza para especificar que un pipeline de Dataflow debe ejecutarse en Google Cloud Dataflow en lugar de localmente? A) --runner=DirectRunner B) --runner=DataflowRunner C) --execute=Dataflow D) --cloud=Dataflow
B --runner=DataflowRunner
129
En un pipeline de Dataflow escrito en Python, ¿cuál es el propósito del parámetro temp_location al ejecutar el pipeline en Dataflow? A) Especifica la ubicación donde se almacenan los archivos temporales durante la ejecución del pipeline. B) Especifica la ubicación donde se almacena la salida final. C) Especifica la ubicación de los datos de entrada. D) Especifica la ubicación de la instalación del SDK de Beam.
A Especifica la ubicación donde se almacenan los archivos temporales durante la ejecución del pipeline.
130
¿Cuál de las siguientes NO es un paso necesario antes de ejecutar un pipeline de Dataflow en Google Cloud? A) Habilitar la API de Dataflow B) Crear un bucket en Cloud Storage C) Instalar el SDK de Apache Beam D) Habilitar la API de Kubernetes Engine
D Habilitar la API de Kubernetes Engine
131
En el contexto de un pipeline de Dataflow, ¿qué representa un PCollection? A) Una colección paralela de datos que se puede procesar de manera distribuida. B) Un solo elemento de datos en el pipeline. C) El plan de ejecución del pipeline. D) La configuración del pipeline.
A Una colección paralela de datos que se puede procesar de manera distribuida.
132
Estás construyendo un pipeline de Dataflow para procesar un conjunto de datos grande almacenado en Cloud Storage. El pipeline debe leer los datos, realizar algunas transformaciones y escribir los resultados en BigQuery. ¿Cuál es la forma correcta de especificar la fuente y el destino en el pipeline usando Apache Beam para Python? A) Usa beam.io.ReadFromText para leer de Cloud Storage y beam.io.WriteToBigQuery para escribir en BigQuery. B) Usa beam.io.ReadFromBigQuery para leer de Cloud Storage y beam.io.WriteToText para escribir en BigQuery. C) Usa beam.io.ReadFromPubSub para leer de Cloud Storage y beam.io.WriteToPubSub para escribir en BigQuery. D) Usa beam.io.ReadFromText para leer de Cloud Storage y beam.io.WriteToPubSub para escribir en BigQuery.
A Usa beam.io.ReadFromText para leer de Cloud Storage y beam.io.WriteToBigQuery para escribir en BigQuery.
133
En un pipeline de Dataflow, necesitas realizar un conteo de palabras en un archivo de texto, pero deseas que el conteo sea insensible a mayúsculas y minúsculas. ¿Cómo modificarías el pipeline estándar de conteo de palabras para lograr esto? A) Agrega un transform beam.Map(lambda x: x.lower()) después de dividir las líneas en palabras. B) Usa beam.CombineGlobally con una función de combinación personalizada que ignore mayúsculas y minúsculas. C) Establece la bandera case_insensitive en True en el transform beam.io.ReadFromText. D) Usa beam.FlatMap en lugar de beam.Map para dividir las líneas.
A Agrega un transform beam.Map(lambda x: x.lower()) después de dividir las líneas en palabras.
134
¿Cuál es la diferencia principal entre los métodos append() y extend() en listas de Python? a) append() añade elementos al principio de la lista mientras que extend() los añade al final b) append() añade un único elemento al final de la lista mientras que extend() añade múltiples elementos iterables al final de la lista c) append() y extend() son sinónimos y pueden usarse indistintamente d) append() solo puede añadir elementos simples mientras que extend() solo puede añadir otras listas
B append() añade un único elemento al final de la lista mientras que extend() añade múltiples elementos iterables al final de la lista
135
¿Qué estructura de datos en Python garantiza elementos únicos y no mantiene un orden específico? a) Lista b) Tupla c) Conjunto (set) d) Diccionario
C Conjunto (set)
136
Si ejecutas el siguiente código, ¿qué valor se imprimirá? items = ['a', 'b', 'c', 'd', 'e'] print(items[-2:]) a) ['d', 'e'] b) ['a', 'b', 'c'] c) ['e'] d) Error, el índice no puede ser negativo
A ['d', 'e']
137
En una comprensión de lista con múltiples bucles anidados, ¿en qué orden se ejecutan los bucles? a) De izquierda a derecha, igual que en la sintaxis normal de bucles anidados b) De derecha a izquierda, al contrario que en la sintaxis normal c) Los bucles se ejecutan en paralelo d) El orden depende de la versión de Python
B De derecha a izquierda, al contrario que en la sintaxis normal
138
¿Cuál es la diferencia principal entre json.dump() y json.dumps() en el módulo JSON de Python? a) json.dump() serializa a formato binario mientras que json.dumps() serializa a formato de texto b) json.dump() escribe directamente a un archivo mientras que json.dumps() devuelve una cadena c) json.dump() puede manejar estructuras complejas mientras que json.dumps() solo maneja estructuras simples d) No hay diferencia, son sinónimos
B json.dump() escribe directamente a un archivo mientras que json.dumps() devuelve una cadena
139
¿Qué opción del módulo JSON permite formatear la salida JSON con indentación? a) format=True b) pretty=True c) indent=4 d) beautiful=True
C indent=4
140
Al deserializar JSON a Python, ¿qué estructura de Python corresponderá a un array JSON? a) Tupla b) Conjunto c) Lista d) Generador
C Lista
141
En el siguiente código para navegar por el sistema de archivos, ¿qué representa la variable top_dir? for top_dir, directories, files in os.walk('.'): # código a) La ruta absoluta del directorio actual b) El directorio raíz desde donde se inició la ejecución del script c) El directorio actual en la iteración del recorrido d) El directorio de nivel superior del sistema operativo
C El directorio actual en la iteración del recorrido
142
¿Cuál es la forma más segura de trabajar con archivos en Python para garantizar que se cierren correctamente incluso si ocurre una excepción? a) Usar try/finally y cerrar el archivo explícitamente b) Usar el administrador de contexto with c) Usar funciones lambda para el manejo de archivos d) Implementar el patrón decorador para las operaciones de archivo
B Usar el administrador de contexto with
143
¿Qué ocurrirá al ejecutar el siguiente código? ro_items = ('first', 'second', 'third') ro_items.append('fourth') a) Se añadirá 'fourth' al final de la tupla b) Se creará una nueva tupla con el elemento añadido c) Se producirá un AttributeError porque las tuplas son inmutables d) Se convertirá automáticamente la tupla en una lista
C Se producirá un AttributeError porque las tuplas son inmutables
144
¿Cuál es la forma correcta de desempaquetar los primeros dos elementos de una lista en variables separadas, dejando el resto en otra variable? a) a, b, *rest = my_list b) a, b, rest* = my_list c) a, b, ...rest = my_list d) a, b, &rest = my_list
A a, b, *rest = my_list
145
En el contexto de acceso a diccionarios, ¿cuál es la diferencia principal entre usar contactos['John'] y contactos.get('John', 'Peter')? a) No hay diferencia, ambos devuelven el mismo resultado b) El primero lanzará un KeyError si la clave no existe, mientras que el segundo devolverá 'Peter' c) El primero es más rápido pero menos seguro d) El segundo modifica el diccionario añadiendo la clave si no existe
B El primero lanzará un KeyError si la clave no existe, mientras que el segundo devolverá 'Peter'
146
¿Cuál es la forma más eficiente de ordenar un diccionario por sus valores en Python? a) sorted(my_dict) b) my_dict.sort() c) sorted(my_dict.items(), key=lambda x: x[1]) d) my_dict.sort_by_value()
C sorted(my_dict.items(), key=lambda x: x[1])
147
Al procesar grandes conjuntos de datos, ¿qué estructura de datos sería más eficiente para buscar si un elemento existe? a) Lista b) Conjunto (set) c) Tupla d) Lista ordenada
B Conjunto (set)
148
¿Cuál es el método correcto para conseguir tanto las claves como los valores al iterar sobre un diccionario? a) for key, value in my_dict: b) for key, value in my_dict.iterate(): c) for key, value in my_dict.items(): d) for (key, value) in my_dict:
C for key, value in my_dict.items():
149
En el procesamiento de datos con Python, ¿qué técnica permitiría filtrar elementos de una lista sin usar un bucle explícito? a) Lista indexada b) Comprensión de listas c) Mapeo de funciones d) Reducción de listas
B Comprensión de listas
150
Al trabajar con archivos grandes en un entorno de Google Cloud, ¿qué método de procesamiento sería más adecuado? a) Cargar todo el archivo en memoria y procesarlo b) Procesar el archivo línea por línea en streaming c) Convertir siempre los archivos a formato JSON antes de procesarlos d) Descargar los archivos localmente antes de procesarlos
B Procesar el archivo línea por línea en streaming
151
Al serializar objetos Python a JSON para almacenarlos en Google Cloud Storage, ¿qué consideración es importante tener en cuenta? a) Los objetos complejos como fechas deben convertirse a formatos compatibles con JSON b) Google Cloud Storage solo acepta JSON con formato comprimido c) Las claves en los diccionarios deben estar en mayúsculas d) El JSON debe estar siempre en una sola línea
A Los objetos complejos como fechas deben convertirse a formatos compatibles con JSON
152
Para manejar archivos muy grandes en un pipeline de datos de Google Cloud Platform usando Python, ¿qué biblioteca especializada sería más adecuada? a) json b) pickle c) pandas d) apache-beam
D apache-beam
153
¿Qué imprime el siguiente código? lista = [1, 2, 3, 4] print([x*x for x in lista if x % 2 == 0]) A) [1, 4, 9, 16] B) [2, 4] C) [4, 16] D) Error
C [4, 16]
154
¿Cuál es el resultado de ejecutar esto? def f(a, b=2, c=3): return a + b * c print(f(4, c=5)) A) 14 B) 23 C) 9 D) Error
A 14
155
¿Qué hace el siguiente fragmento? try: x = int("hola") except ValueError: print("¡No es un número!") finally: print("Fin") A) Imprime sólo Fin B) Imprime ¡No es un número! y luego Fin C) Lanza una excepción y no llega a imprimir nada D) Imprime Fin y luego lanza la excepción
B Imprime ¡No es un número! y luego Fin
156
Dado el diccionario d = {'a':1, 'b':2}, ¿qué produce d.get('c', 0)? A) None B) 0 C) KeyError D) ''
B 0
157
¿Cuál de estas expresiones crea un set en Python? A) {1, 2, 3} B) [] C) (1, 2, 3) D) {'a':1}
A {1, 2, 3}
158
¿Qué pasa si escribimos import math dentro de una función en Python? A) Da error de sintaxis. B) La función se hace más lenta. C) Se importa sólo cuando se llama a la función. D) math queda disponible globalmente aunque la función no se ejecute.
C Se importa sólo cuando se llama a la función.
159
¿Cuál es la función de la cláusula HAVING en SQL? A) Filtrar filas antes del GROUP BY. B) Filtrar grupos después de aplicar agregaciones. C) Ordenar el resultado. D) Definir alias de columnas.
B Filtrar grupos después de aplicar agregaciones.
160
Dadas dos tablas, empleados(emp_id, nombre, dept_id) y departamentos(dept_id, dept_name), ¿qué tipo de JOIN devuelve todos los empleados aunque no tengan departamento? A) INNER JOIN B) LEFT JOIN C) RIGHT JOIN D) FULL JOIN
B LEFT JOIN
161
¿Qué imprime el comando ls -l | grep '^d'? A) Todos los ficheros, incluyendo ocultos. B) Sólo los directorios (entradas cuyo permiso empieza por d). C) Sólo ficheros regulares. D) Error de sintaxis.
B Sólo los directorios (entradas cuyo permiso empieza por d).
162
¿Cómo dar permisos de ejecución al usuario sobre el archivo script.sh? A) chmod u+x script.sh B) chmod +rw script.sh C) chown x script.sh D) chmod 777 script.sh
A chmod u+x script.sh
163
Para redirigir la salida de errores (stderr) al fichero errores.log y la salida estándar (stdout) a salida.log, ¿qué comando usarías? A) comando > salida.log 2> errores.log B) comando 2> salida.log > errores.log C) comando >> salida.log 2>> errores.log D) comando &> salida.log
A comando > salida.log 2> errores.log
164
¿Cuáles de los siguientes son tipos de datos inmutables en Python? a) Listas b) Diccionarios c) Tuplas d) Conjuntos (sets)
C Tuplas
165
¿Cuál es la forma correcta de definir una lista por comprensión que genere los cuadrados de los números del 1 al 10? a) [x**2 for x in range(1, 10)] b) [x**2 for x in range(1, 11)] c) [x*x for x in range(1, 10)] d) [for x in range(1, 11): x**2]
B [x**2 for x in range(1, 11)]
166
¿Qué método se usa para añadir un elemento al final de una lista en Python? a) insert() b) append() c) extend() d) add()
B append()
167
¿Cuál es el resultado de la siguiente expresión en Python: 3 * 2 ** 2? a) 12 b) 36 c) 9 d) 18
A 12 En Python, el operador de exponenciación (**) tiene mayor precedencia que el de multiplicación (*). Por lo tanto, primero se calcula 2 ** 2 = 4 y luego 3 * 4 = 12.
168
¿Cuál de las siguientes estructuras de control NO existe en Python? a) for b) while c) do-while d) if-elif-else
C do-while
169
¿Qué función se utiliza para conectarse a una base de datos SQL desde Python utilizando la biblioteca pyodbc? a) pyodbc.create_connection() b) pyodbc.connect() c) pyodbc.open() d) pyodbc.sql_connect()
B pyodbc.connect()
170
¿Cuál es la forma correcta de ejecutar una consulta SQL desde Python usando pyodbc? a) cursor.execute(SQL_QUERY) b) connection.query(SQL_QUERY) c) pyodbc.execute(SQL_QUERY) d) connection.execute(SQL_QUERY)
A cursor.execute(SQL_QUERY)
171
¿Qué método se utiliza para obtener todos los registros de un conjunto de resultados después de ejecutar una consulta con pyodbc? a) cursor.getall() b) cursor.fetchall() c) cursor.readall() d) cursor.retrieveall()
B cursor.fetchall()
172
¿Qué método se utiliza para confirmar una transacción en una base de datos usando pyodbc? a) cursor.save() b) connection.save() c) connection.commit() d) cursor.commit()
C connection.commit()
173
¿Qué estructura de datos de Python permite almacenar pares clave-valor? a) Lista b) Tupla c) Diccionario d) Conjunto
C Diccionario
174
¿Cuál es el método utilizado para abrir un archivo en Python? a) read() b) open() c) file() d) load()
B open()
175
¿Qué hace la siguiente línea de código en Python? resultado = [x for x in range(10) if x % 2 == 0] a) Crea una lista con los números pares del 0 al 9 b) Crea una lista con los números impares del 0 al 9 c) Crea una lista con los números del 0 al 9 elevados al cuadrado d) Genera un error de sintaxis
A Crea una lista con los números pares del 0 al 9
176
¿Cuál es la forma correcta de capturar excepciones en Python? a) try: # código except Exception as e: # manejo de error b) try: # código catch Exception as e: # manejo de error c) try: # código error Exception as e: # manejo de error d) catch: # código except Exception as e: # manejo de error
A try: # código except Exception as e: # manejo de error
177
¿Qué devuelve la función randrange(1000) del módulo random en Python? a) Un número decimal aleatorio entre 0 y 1000 b) Un número entero aleatorio entre 0 y 999 c) Un número entero aleatorio entre 1 y 1000 d) Una lista de 1000 números aleatorios
B Un número entero aleatorio entre 0 y 999
178
¿Cuál es la función de un cursor en SQL? a) Ordenar los resultados de una consulta b) Permitir recorrer los resultados de una consulta fila por fila c) Crear índices en una tabla d) Optimizar consultas complejas
B Permitir recorrer los resultados de una consulta fila por fila
179
¿Qué tipo de JOIN muestra todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha? a) INNER JOIN b) RIGHT JOIN c) LEFT JOIN d) FULL JOIN
C LEFT JOIN
180
¿Cuál de las siguientes NO es una función de agregación en SQL? a) COUNT() b) CONCAT() c) SUM() d) AVG()
B CONCAT()
181
¿Qué archivo en Linux contiene información sobre los usuarios del sistema? a) /etc/usersfile b) /usr/passwd c) /etc/passwd d) /ect/users
C /etc/passwd
182
¿Qué comando se utiliza para mostrar el consumo de CPU y memoria en Linux? a) free b) du c) ps d) top
D top
183
¿Qué comando muestra la cantidad de espacio en disco utilizado por las particiones? a) free b) du c) df d) top
C df
184
¿Qué cláusula SQL se utiliza para combinar filas de dos o más tablas, basándose en una columna relacionada entre ellas? A) COMBINE B) MERGE C) UNION D) JOIN
D JOIN
185
¿Cuál de las siguientes opciones crea una lista en Python? A) mi_var = {1, 2, 3} B) mi_var = (1, 2, 3) C) mi_var = [1, 2, 3] D) mi_var = "1, 2, 3"
C mi_var = [1, 2, 3]
186
Observa el siguiente código Python. ¿Qué imprimirá? numeros = [10, 20, 30, 40, 50] suma = 0 for num in numeros: if num > 25: suma += num print(suma) A) 150 B) 60 C) 120 D) 30
C 120
187
¿Cuál es el propósito principal de una función en Python? A) Almacenar una secuencia de valores inmutables. B) Agrupar un bloque de código reutilizable que realiza una tarea específica. C) Iterar sobre los elementos de una secuencia. D) Definir una estructura de datos clave-valor.
B Agrupar un bloque de código reutilizable que realiza una tarea específica.
188
Tienes un diccionario estudiante = {"nombre": "Ana", "edad": 22, "curso": "Ingeniería"}. ¿Cómo accederías a la edad del estudiante? A) estudiante[1] B) estudiante.get(edad) C) estudiante{"edad"} D) estudiante["edad"]
D estudiante["edad"]
189
¿Qué hace el siguiente código Python? mensaje = "Hola Mundo" print(mensaje[5:]) A) Imprime "Hola" B) Imprime "Mundo" C) Imprime "Hola " D) Genera un error
B Imprime "Mundo"
190
¿Qué método se utiliza comúnmente para añadir un elemento al final de una lista en Python? A) add() B) insert() C) append() D) extend()
C append()
191
¿Qué estructura de control usarías para ejecutar un bloque de código solo si una condición específica es verdadera? A) for B) while C) if D) try
C if
192
¿Cuál de las siguientes afirmaciones sobre las tuplas en Python es VERDADERA? A) Son mutables (se pueden modificar después de creadas). B) Se definen usando llaves {}. C) Son inmutables (no se pueden modificar después de creadas). D) Solo pueden contener números.
C Son inmutables (no se pueden modificar después de creadas).
193
¿Cuál es la diferencia entre una lista y una tupla en Python?
Una lista es mutable (puede cambiarse) y se define con corchetes [], mientras que una tupla es inmutable (no puede cambiarse) y se define con paréntesis ().
194
¿Cómo manejas excepciones en Python?
Se manejan usando bloques try-except. El bloque try contiene el código que podría generar una excepción, y el except la maneja.
195
¿Qué es un diccionario en Python?
Es una estructura de datos que almacena mapeos de claves únicas a valores, definida con llaves {}.
196
¿Cuál es la diferencia entre los comandos DELETE y TRUNCATE en SQL?
DELETE es un comando DML que elimina filas según una condición, mientras que TRUNCATE es un comando DDL que elimina todas las filas sin registrar cada eliminación.
197
Explica la diferencia entre INNER JOIN, LEFT JOIN y RIGHT JOIN.
INNER JOIN: Devuelve solo las filas que tienen coincidencia en ambas tablas. LEFT JOIN: Devuelve todas las filas de la tabla izquierda y las coincidencias de la derecha; si no hay coincidencia, muestra NULL en la derecha. RIGHT JOIN: Devuelve todas las filas de la tabla derecha y las coincidencias de la izquierda; si no hay coincidencia, muestra NULL en la izquierda.
198
¿Cómo podés programar tareas para que se ejecuten en un horario específico en Linux?
Usa el demonio cron y edita la tabla cron con el comando crontab para programar tareas. Por ejemplo, para ejecutar un script todos los días a las 2 AM, añadirías 0 2 * * * /path/to/script.sh a la tabla cron, útil para automatizar tareas repetitivas.
199
Usted tiene dos proyectos, Proyecto A y Proyecto B. El Proyecto A requiere el paquete X versión 1.0, mientras que el Proyecto B requiere el paquete X versión 2.0. ¿Cómo puede gestionar estas dependencias sin conflictos? A) Instalar ambas versiones globalmente y especificar la versión en el código B) Usar entornos virtuales para cada proyecto C) Usar un archivo requirements.txt para cada proyecto D) Modificar la variable de entorno PATH para apuntar a diferentes instalaciones de Python
B Usar entornos virtuales para cada proyecto
200
¿Qué imprimirá el siguiente código Python? def func(a, b): return a * b print(func(b=3, a=4)) A) 12 B) 7 C) Error, orden incorrecto de argumentos D) 3 * 4 pero con variables intercambiadas
A 12
201
En Python, ¿qué sucede cuando intenta acceder a una clave que no existe en un diccionario? A) Devuelve None B) Lanza un KeyError C) Devuelve un diccionario vacío D) Crea la clave con valor None
B Lanza un KeyError
202
Dado un DataFrame df de Pandas con columnas 'A' y 'B', ¿qué devuelve df[df['A'] > 5]? A) Un nuevo DataFrame con filas donde la columna 'A' es mayor que 5 B) Una Serie con valores booleanos indicando donde 'A' > 5 C) El DataFrame original con filas donde 'A' > 5 eliminadas D) Un error, ya que no se puede usar indexación booleana en DataFrames
A Un nuevo DataFrame con filas donde la columna 'A' es mayor que 5
203
En un script de Bash, ¿qué hace la siguiente línea? #!/bin/bash -x A) Ejecuta el script con salida de depuración B) Establece el script para ejecutarse con privilegios elevados C) Especifica que el script debe ejecutarse con Bash versión x D) Indica que el script es ejecutable
A Ejecuta el script con salida de depuración
204
¿Cuál de las siguientes opciones de código Python es la forma más eficiente de leer un archivo CSV grande almacenado en Google Cloud Storage y procesarlo en chunks usando pandas? a) import pandas as pd from google.cloud import storage client = storage.Client() bucket = client.get_bucket('bucket-name') blob = bucket.blob('ruta/al/archivo.csv') data = blob.download_as_string() df = pd.read_csv(pd.io.common.BytesIO(data)) b) import pandas as pd from google.cloud import storage client = storage.Client() bucket = client.get_bucket('bucket-name') blob = bucket.blob('ruta/al/archivo.csv') blob.download_to_filename('archivo_local.csv') df = pd.read_csv('archivo_local.csv') c) import pandas as pd from io import BytesIO from google.cloud import storage client = storage.Client() bucket = client.get_bucket('bucket-name') blob = bucket.blob('ruta/al/archivo.csv') with BytesIO(blob.download_as_bytes()) as f: for chunk in pd.read_csv(f, chunksize=10000): # procesar chunk pass d) import pandas as pd df = pd.read_csv('gs://bucket-name/ruta/al/archivo.csv')
C import pandas as pd from io import BytesIO from google.cloud import storage client = storage.Client() bucket = client.get_bucket('bucket-name') blob = bucket.blob('ruta/al/archivo.csv') with BytesIO(blob.download_as_bytes()) as f: for chunk in pd.read_csv(f, chunksize=10000): # procesar chunk pass
205
Al utilizar Apache Beam con Python en Dataflow, ¿cuál de las siguientes transformaciones es correcta para realizar un GroupBy y suma de valores en una PCollection? a) import apache_beam as beam def count_elements(element): (key, val) = element return (key, sum(val)) counts = ( pipeline | 'Read' >> beam.io.ReadFromText('gs://my-bucket/data.txt') | 'Split' >> beam.Map(lambda line: line.split(',')) | 'Pair' >> beam.Map(lambda record: (record[0], int(record[1]))) | 'Group' >> beam.GroupByKey() | 'Sum' >> beam.Map(count_elements) ) b) import apache_beam as beam counts = ( pipeline | 'Read' >> beam.io.ReadFromText('gs://my-bucket/data.txt') | 'Split' >> beam.Map(lambda line: line.split(',')) | 'Sum' >> beam.CombinePerKey(sum) ) c) import apache_beam as beam counts = ( pipeline | 'Read' >> beam.io.ReadFromText('gs://my-bucket/data.txt') | 'Split' >> beam.Map(lambda line: line.split(',')) | 'Pair' >> beam.Map(lambda record: (record[0], int(record[1]))) | 'Sum' >> beam.CombinePerKey(sum) ) d) import apache_beam as beam counts = ( pipeline | 'Read' >> beam.io.ReadFromText('gs://my-bucket/data.txt') | 'Split' >> beam.FlatMap(lambda line: line.split(',')) | 'Pair' >> beam.Map(lambda record: (record, 1)) | 'Group' >> beam.GroupByKey() | 'Sum' >> beam.Map(lambda kv: (kv[0], sum(kv[1]))) )
C import apache_beam as beam counts = ( pipeline | 'Read' >> beam.io.ReadFromText('gs://my-bucket/data.txt') | 'Split' >> beam.Map(lambda line: line.split(',')) | 'Pair' >> beam.Map(lambda record: (record[0], int(record[1]))) | 'Sum' >> beam.CombinePerKey(sum) )
206
¿Qué código Python es correcto para crear una función Cloud Function que responda a eventos de creación de archivos en un bucket de Cloud Storage y ejecute una carga en BigQuery? a) from google.cloud import bigquery def process_file(data, context): file_name = data['name'] bucket_name = data['bucket'] client = bigquery.Client() dataset_id = 'my_dataset' table_id = 'my_table' job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, ) uri = f"gs://{bucket_name}/{file_name}" load_job = client.load_table_from_uri( uri, f"{dataset_id}.{table_id}", job_config=job_config ) load_job.result() b) from google.cloud import bigquery def process_file(event, context): file_name = event['name'] bucket_name = event['bucket'] client = bigquery.Client() dataset_id = 'my_dataset' table_id = 'my_table' job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, ) uri = f"gs://{bucket_name}/{file_name}" load_job = client.load_table_from_uri( uri, f"{dataset_id}.{table_id}", job_config=job_config ) load_job.result() c) from google.cloud import bigquery def process_file(file, context): file_name = file.name bucket_name = file.bucket client = bigquery.Client() dataset_id = 'my_dataset' table_id = 'my_table' job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, ) uri = f"gs://{bucket_name}/{file_name}" try: load_job = client.load_table_from_uri( uri, f"{dataset_id}.{table_id}", job_config=job_config ) load_job.result() return "Success" except Exception as e: return f"Error: {str(e)}" d) import functions_framework from google.cloud import bigquery @functions_framework.cloud_event def process_file(cloud_event): data = cloud_event.data file_name = data["name"] bucket_name = data["bucket"] client = bigquery.Client() dataset_id = 'my_dataset' table_id = 'my_table' job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, ) uri = f"gs://{bucket_name}/{file_name}" load_job = client.load_table_from_uri( uri, f"{dataset_id}.{table_id}", job_config=job_config ) load_job.result()
D import functions_framework from google.cloud import bigquery @functions_framework.cloud_event def process_file(cloud_event): data = cloud_event.data file_name = data["name"] bucket_name = data["bucket"] client = bigquery.Client() dataset_id = 'my_dataset' table_id = 'my_table' job_config = bigquery.LoadJobConfig( autodetect=True, source_format=bigquery.SourceFormat.CSV, ) uri = f"gs://{bucket_name}/{file_name}" load_job = client.load_table_from_uri( uri, f"{dataset_id}.{table_id}", job_config=job_config ) load_job.result()
207
¿Cuál es la forma más eficiente de procesar un DataFrame de pandas con millones de filas utilizando operaciones vectorizadas para calcular una nueva columna basada en valores existentes? a) def transform_row(row): if row['valor'] > 100: return row['valor'] * 2 else: return row['valor'] / 2 df['nueva_columna'] = df.apply(transform_row, axis=1) b) df['nueva_columna'] = df['valor'].apply(lambda x: x * 2 if x > 100 else x / 2) c) import numpy as np df['nueva_columna'] = np.where(df['valor'] > 100, df['valor'] * 2, df['valor'] / 2) d) nueva_columna = [] for i in range(len(df)): if df.loc[i, 'valor'] > 100: nueva_columna.append(df.loc[i, 'valor'] * 2) else: nueva_columna.append(df.loc[i, 'valor'] / 2) df['nueva_columna'] = nueva_columna
C import numpy as np df['nueva_columna'] = np.where(df['valor'] > 100, df['valor'] * 2, df['valor'] / 2)
208
¿Cuál de las siguientes consultas BigQuery es más eficiente para analizar una tabla particionada por fecha y agrupada por región? a) SELECT region, DATE(timestamp) as date, COUNT(*) as events, SUM(revenue) as total_revenue FROM `project.dataset.events_table` WHERE timestamp BETWEEN '2025-01-01' AND '2025-01-31' GROUP BY region, date ORDER BY date, total_revenue DESC b) SELECT region, DATE(timestamp) as date, COUNT(*) as events, SUM(revenue) as total_revenue FROM `project.dataset.events_table` WHERE DATE(timestamp) BETWEEN '2025-01-01' AND '2025-01-31' GROUP BY region, date ORDER BY date, total_revenue DESC c) #standardSQL SELECT region, EXTRACT(DATE FROM timestamp) as date, COUNT(*) as events, SUM(revenue) as total_revenue FROM `project.dataset.events_table` WHERE EXTRACT(DATE FROM timestamp) BETWEEN '2025-01-01' AND '2025-01-31' AND region IS NOT NULL GROUP BY region, date ORDER BY date, total_revenue DESC d) WITH filtered_data AS ( SELECT region, DATE(timestamp) as date, revenue FROM `project.dataset.events_table` WHERE DATE(timestamp) BETWEEN '2025-01-01' AND '2025-01-31' ) SELECT region, date, COUNT(*) as events, SUM(revenue) as total_revenue FROM filtered_data GROUP BY region, date ORDER BY date, total_revenue DESC
B SELECT region, DATE(timestamp) as date, COUNT(*) as events, SUM(revenue) as total_revenue FROM `project.dataset.events_table` WHERE DATE(timestamp) BETWEEN '2025-01-01' AND '2025-01-31' GROUP BY region, date ORDER BY date, total_revenue DESC
209
¿Qué comando Bash es el más adecuado para monitorear continuamente los errores en un archivo de registro que se está generando en tiempo real durante la ejecución de un pipeline de datos? A) cat /var/log/dataflow/pipeline.log | grep ERROR B) less +F /var/log/dataflow/pipeline.log C) tail -f /var/log/dataflow/pipeline.log | grep --color=auto -i "error\|exception\|fail" D) grep -r "ERROR" /var/log/dataflow/ > errors.txt && cat errors.txt
C tail -f /var/log/dataflow/pipeline.log | grep --color=auto -i "error\|exception\|fail"
210
¿Cuál es el script Bash correcto para automatizar la descarga de archivos CSV de un bucket de GCS, procesarlos y cargarlos a otro bucket, todo verificando errores en cada paso? a) #!/bin/bash gsutil cp gs://source-bucket/*.csv . for file in *.csv; do python process_file.py "$file" > "${file%.csv}_processed.csv" gsutil cp "${file%.csv}_processed.csv" gs://target-bucket/ done b) #!/bin/bash set -e gsutil -m cp gs://source-bucket/*.csv /tmp/data/ for file in /tmp/data/*.csv; do echo "Processing $file..." if python process_file.py "$file" > "/tmp/processed/$(basename "${file%.csv}_processed.csv")"; then echo "Successfully processed $file" else echo "Failed to process $file" >&2 exit 1 fi done gsutil -m cp /tmp/processed/* gs://target-bucket/ echo "All files processed and uploaded successfully" c) #!/bin/bash set -euo pipefail TEMPDIR=$(mktemp -d) trap 'rm -rf "$TEMPDIR"' EXIT echo "Downloading files..." if ! gsutil -m cp gs://source-bucket/*.csv "$TEMPDIR/"; then echo "Error downloading files" >&2 exit 1 fi mkdir -p "$TEMPDIR/processed" for file in "$TEMPDIR"/*.csv; do filename=$(basename "$file") echo "Processing $filename..." if ! python process_file.py "$file" > "$TEMPDIR/processed/${filename%.csv}_processed.csv"; then echo "Error processing $filename" >&2 exit 1 fi done echo "Uploading processed files..." if ! gsutil -m cp "$TEMPDIR/processed"/* gs://target-bucket/; then echo "Error uploading processed files" >&2 exit 1 fi echo "All files processed and uploaded successfully" d) #!/bin/bash mkdir -p data processed gsutil cp gs://source-bucket/*.csv data/ ls data/*.csv | xargs -I{} python process_file.py {} processed/ gsutil cp processed/* gs://target-bucket/ rm -rf data processed
C #!/bin/bash set -euo pipefail TEMPDIR=$(mktemp -d) trap 'rm -rf "$TEMPDIR"' EXIT echo "Downloading files..." if ! gsutil -m cp gs://source-bucket/*.csv "$TEMPDIR/"; then echo "Error downloading files" >&2 exit 1 fi mkdir -p "$TEMPDIR/processed" for file in "$TEMPDIR"/*.csv; do filename=$(basename "$file") echo "Processing $filename..." if ! python process_file.py "$file" > "$TEMPDIR/processed/${filename%.csv}_processed.csv"; then echo "Error processing $filename" >&2 exit 1 fi done echo "Uploading processed files..." if ! gsutil -m cp "$TEMPDIR/processed"/* gs://target-bucket/; then echo "Error uploading processed files" >&2 exit 1 fi echo "All files processed and uploaded successfully"
211
# Leer todo el archivo en memoria ¿Cuál de las siguientes opciones de Python es la más eficiente para procesar un archivo CSV muy grande (>10GB) línea por línea realizando transformaciones y escribiendo a BigQuery? a) import pandas as pd from google.cloud import bigquery client = bigquery.Client() df = pd.read_csv('archivo_grande.csv') # Transformar datos df['nueva_columna'] = df['columna_existente'] * 2 # Cargar a BigQuery job = client.load_table_from_dataframe( df, 'proyecto.dataset.tabla' ) job.result() b) import csv from google.cloud import bigquery client = bigquery.Client() table_ref = client.dataset('dataset').table('tabla') job_config = bigquery.LoadJobConfig( source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True, ) # Procesar el archivo with open('archivo_grande.csv', 'rb') as file: job = client.load_table_from_file( file, table_ref, job_config=job_config ) job.result() c) import csv import tempfile from google.cloud import bigquery Configurar cliente client = bigquery.Client() table_id = 'proyecto.dataset.tabla' Procesar archivo en chunks def transform_row(row): row['nueva_columna'] = int(row['columna_existente']) * 2 return row chunk_size = 100000 with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp_file: writer = csv.DictWriter(temp_file, fieldnames=['columna1', 'columna2', 'nueva_columna']) writer.writeheader() with open('archivo_grande.csv', 'r') as f: reader = csv.DictReader(f) rows = [] for i, row in enumerate(reader): rows.append(transform_row(row)) if i % chunk_size == 0 and i > 0: writer.writerows(rows) rows = [] if rows: writer.writerows(rows) Cargar archivo transformado a BigQuery job_config = bigquery.LoadJobConfig( source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, ) with open(temp_file.name, 'rb') as source_file: job = client.load_table_from_file( source_file, table_id, job_config=job_config ) job.result() d) import csv from google.cloud import bigquery client = bigquery.Client() table_id = 'proyecto.dataset.tabla' Configurar esquema schema = [ bigquery.SchemaField("columna1", "STRING"), bigquery.SchemaField("columna2", "INTEGER"), bigquery.SchemaField("nueva_columna", "INTEGER"), ] Configurar trabajo de carga por streaming job_config = bigquery.LoadJobConfig(schema=schema) table = client.get_table(table_id) Procesar el archivo por lotes batch_size = 1000 rows_to_insert = [] with open('archivo_grande.csv', 'r') as f: reader = csv.DictReader(f) for i, row in enumerate(reader): # Transformar fila transformed_row = ( row['columna1'], int(row['columna2']), int(row['columna2']) * 2, # nueva_columna ) rows_to_insert.append(transformed_row) # Insertar en lotes if len(rows_to_insert) >= batch_size: errors = client.insert_rows(table, rows_to_insert) if errors: print(f"Errores: {errors}") rows_to_insert = [] Insertar filas restantes if rows_to_insert: errors = client.insert_rows(table, rows_to_insert) if errors: print(f"Errores: {errors}")
D import csv from google.cloud import bigquery client = bigquery.Client() table_id = 'proyecto.dataset.tabla' Configurar esquema schema = [ bigquery.SchemaField("columna1", "STRING"), bigquery.SchemaField("columna2", "INTEGER"), bigquery.SchemaField("nueva_columna", "INTEGER"), ] Configurar trabajo de carga por streaming job_config = bigquery.LoadJobConfig(schema=schema) table = client.get_table(table_id) Procesar el archivo por lotes batch_size = 1000 rows_to_insert = [] with open('archivo_grande.csv', 'r') as f: reader = csv.DictReader(f) for i, row in enumerate(reader): # Transformar fila transformed_row = ( row['columna1'], int(row['columna2']), int(row['columna2']) * 2, # nueva_columna ) rows_to_insert.append(transformed_row) # Insertar en lotes if len(rows_to_insert) >= batch_size: errors = client.insert_rows(table, rows_to_insert) if errors: print(f"Errores: {errors}") rows_to_insert = [] Insertar filas restantes if rows_to_insert: errors = client.insert_rows(table, rows_to_insert) if errors: print(f"Errores: {errors}")
212
¿Cuál de los siguientes comandos Python utilizando la biblioteca google-cloud-storage es correcto para listar todos los archivos CSV en un bucket de GCS, ordenarlos por fecha de creación y procesar solo los más recientes? a) from google.cloud import storage client = storage.Client() bucket = client.get_bucket('my-bucket') blobs = bucket.list_blobs(prefix='data/') csv_files = [blob for blob in blobs if blob.name.endswith('.csv')] csv_files.sort(key=lambda x: x.time_created, reverse=True) recent_files = csv_files[:5] # Procesar los 5 más recientes for blob in recent_files: print(f"Procesando {blob.name} creado el {blob.time_created}") blob.download_to_filename(f"/tmp/{blob.name.split('/')[-1]}") # Procesar archivo b) from google.cloud import storage import datetime client = storage.Client() bucket = client.get_bucket('my-bucket') blobs = list(bucket.list_blobs()) yesterday = datetime.datetime.now() - datetime.timedelta(days=1) for blob in blobs: if blob.name.endswith('.csv') and blob.time_created > yesterday: print(f"Procesando {blob.name}") blob.download_to_filename(f"/tmp/{blob.name}") # Procesar archivo c) from google.cloud import storage from datetime import datetime, timedelta client = storage.Client() bucket = client.bucket('my-bucket') all_blobs = list(client.list_blobs(bucket)) csv_blobs = [blob for blob in all_blobs if blob.name.endswith('.csv')] yesterday = datetime.now(tz=datetime.timezone.utc) - timedelta(days=1) recent_blobs = [ blob for blob in csv_blobs if blob.time_created > yesterday ] recent_blobs.sort(key=lambda b: b.time_created, reverse=True) for blob in recent_blobs[:10]: # Procesar los 10 más recientes print(f"Procesando {blob.name} creado el {blob.time_created}") # Procesar archivo d) from google.cloud import storage import os def list_and_process_recent_files(bucket_name, prefix='', max_files=5): client = storage.Client() bucket = client.bucket(bucket_name) # Obtener lista de blobs con el prefijo especificado blobs = list(bucket.list_blobs(prefix=prefix)) # Filtrar solo archivos CSV y ordenar por fecha de creación csv_blobs = [blob for blob in blobs if blob.name.endswith('.csv')] csv_blobs.sort(key=lambda b: b.time_created, reverse=True) # Tomar solo los archivos más recientes recent_blobs = csv_blobs[:max_files] for blob in recent_blobs: # Crear directorio local si no existe local_filename = os.path.basename(blob.name) print(f"Procesando {blob.name} (creado: {blob.time_created})") blob.download_to_filename(f"/tmp/{local_filename}") # Aquí procesar el archivo return [blob.name for blob in recent_blobs] Uso processed_files = list_and_process_recent_files('my-bucket', prefix='data/', max_files=5)
D from google.cloud import storage import os def list_and_process_recent_files(bucket_name, prefix='', max_files=5): client = storage.Client() bucket = client.bucket(bucket_name) # Obtener lista de blobs con el prefijo especificado blobs = list(bucket.list_blobs(prefix=prefix)) # Filtrar solo archivos CSV y ordenar por fecha de creación csv_blobs = [blob for blob in blobs if blob.name.endswith('.csv')] csv_blobs.sort(key=lambda b: b.time_created, reverse=True) # Tomar solo los archivos más recientes recent_blobs = csv_blobs[:max_files] for blob in recent_blobs: # Crear directorio local si no existe local_filename = os.path.basename(blob.name) print(f"Procesando {blob.name} (creado: {blob.time_created})") blob.download_to_filename(f"/tmp/{local_filename}") # Aquí procesar el archivo return [blob.name for blob in recent_blobs] Uso processed_files = list_and_process_recent_files('my-bucket', prefix='data/', max_files=5)
213
¿Cuál de los siguientes códigos Python es el más apropiado para implementar un pipeline ETL con manejo de excepciones que extraiga datos de una API, los transforme y los cargue a BigQuery? a) import requests import pandas as pd from google.cloud import bigquery Extraer datos response = requests.get('https://api.example.com/data') data = response.json() Transformar datos df = pd.DataFrame(data) df['processed_date'] = pd.Timestamp.now() Cargar a BigQuery client = bigquery.Client() table_id = 'my-project.dataset.table' job = client.load_table_from_dataframe(df, table_id) job.result() print('Pipeline completado') b) import requests import pandas as pd from google.cloud import bigquery import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) Extraer datos try: response = requests.get('https://api.example.com/data', timeout=30) response.raise_for_status() data = response.json() logger.info(f"Extraídos {len(data)} registros") except requests.exceptions.RequestException as e: logger.error(f"Error en la extracción: {str(e)}") raise Transformar datos try: df = pd.DataFrame(data) df['processed_date'] = pd.Timestamp.now() df['value_doubled'] = df['value'] * 2 logger.info(f"Datos transformados. Shape: {df.shape}") except Exception as e: logger.error(f"Error en la transformación: {str(e)}") raise Cargar a BigQuery try: client = bigquery.Client() table_id = 'my-project.dataset.table' job_config = bigquery.LoadJobConfig( write_disposition=bigquery.WriteDisposition.WRITE_APPEND ) job = client.load_table_from_dataframe(df, table_id, job_config=job_config) job.result() logger.info(f"Datos cargados a {table_id}") except Exception as e: logger.error(f"Error en la carga: {str(e)}") raise logger.info('Pipeline ETL completado exitosamente') c) import requests import pandas as pd from google.cloud import bigquery import logging from datetime import datetime Configurar logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def extract_data(): """Extrae datos de la API""" try: response = requests.get('https://api.example.com/data', timeout=30) response.raise_for_status() data = response.json() logger.info(f"Extraídos {len(data)} registros") return data except requests.exceptions.RequestException as e: logger.error(f"Error en la extracción: {str(e)}") raise def transform_data(data): """Transforma los datos""" try: df = pd.DataFrame(data) # Agregar timestamp de procesamiento df['processed_timestamp'] = datetime.now() # Transformaciones adicionales df['value_doubled'] = df['value'] * 2 df['category'] = df['type'].apply(lambda x: 'high' if x > 50 else 'low') logger.info(f"Datos transformados. Shape: {df.shape}") return df except Exception as e: logger.error(f"Error en la transformación: {str(e)}") raise def load_to_bigquery(df, project_id, dataset_id, table_id): """Carga los datos a BigQuery""" try: client = bigquery.Client(project=project_id) table_ref = f"{project_id}.{dataset_id}.{table_id}" job_config = bigquery.LoadJobConfig( write_disposition=bigquery.WriteDisposition.WRITE_APPEND ) job = client.load_table_from_dataframe(df, table_ref, job_config=job_config) result = job.result() # Esperar a que se complete logger.info(f"Datos cargados a {table_ref}. Filas cargadas: {result.output_rows}") return True except Exception as e: logger.error(f"Error en la carga a BigQuery: {str(e)}") raise def run_pipeline(): """Ejecuta el pipeline ETL completo""" try: # Configuración project_id = 'my-project' dataset_id = 'my_dataset' table_id = 'my_table' # Ejecutar pipeline ETL logger.info("Iniciando pipeline ETL") raw_data = extract_data() transformed_data = transform_data(raw_data) load_to_bigquery(transformed_data, project_id, dataset_id, table_id) logger.info("Pipeline ETL completado exitosamente") except Exception as e: logger.error(f"Error en el pipeline ETL: {str(e)}") raise if __name__ == "__main__": run_pipeline() d) import requests import json import pandas as pd from google.cloud import bigquery def etl_pipeline(): # Extract response = requests.get('https://api.example.com/data') if response.status_code == 200: data = response.json() else: print(f"Error: {response.status_code}") return # Transform df = pd.DataFrame(data) df['fecha_proceso'] = pd.Timestamp.now() # Load client = bigquery.Client() table_id = 'my-project.dataset.table' try: job = client.load_table_from_dataframe(df, table_id) job.result() print("Carga completada") except Exception as e: print(f"Error en carga: {str(e)}") etl_pipeline()
C import requests import pandas as pd from google.cloud import bigquery import logging from datetime import datetime Configurar logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def extract_data(): """Extrae datos de la API""" try: response = requests.get('https://api.example.com/data', timeout=30) response.raise_for_status() data = response.json() logger.info(f"Extraídos {len(data)} registros") return data except requests.exceptions.RequestException as e: logger.error(f"Error en la extracción: {str(e)}") raise def transform_data(data): """Transforma los datos""" try: df = pd.DataFrame(data) # Agregar timestamp de procesamiento df['processed_timestamp'] = datetime.now() # Transformaciones adicionales df['value_doubled'] = df['value'] * 2 df['category'] = df['type'].apply(lambda x: 'high' if x > 50 else 'low') logger.info(f"Datos transformados. Shape: {df.shape}") return df except Exception as e: logger.error(f"Error en la transformación: {str(e)}") raise def load_to_bigquery(df, project_id, dataset_id, table_id): """Carga los datos a BigQuery""" try: client = bigquery.Client(project=project_id) table_ref = f"{project_id}.{dataset_id}.{table_id}" job_config = bigquery.LoadJobConfig( write_disposition=bigquery.WriteDisposition.WRITE_APPEND ) job = client.load_table_from_dataframe(df, table_ref, job_config=job_config) result = job.result() # Esperar a que se complete logger.info(f"Datos cargados a {table_ref}. Filas cargadas: {result.output_rows}") return True except Exception as e: logger.error(f"Error en la carga a BigQuery: {str(e)}") raise def run_pipeline(): """Ejecuta el pipeline ETL completo""" try: # Configuración project_id = 'my-project' dataset_id = 'my_dataset' table_id = 'my_table' # Ejecutar pipeline ETL logger.info("Iniciando pipeline ETL") raw_data = extract_data() transformed_data = transform_data(raw_data) load_to_bigquery(transformed_data, project_id, dataset_id, table_id) logger.info("Pipeline ETL completado exitosamente") except Exception as e: logger.error(f"Error en el pipeline ETL: {str(e)}") raise if __name__ == "__main__": run_pipeline()
214
¿Cuál de los siguientes comandos SQL en BigQuery es más eficiente para analizar datos particionados por día y eliminar duplicados? a) SELECT DISTINCT * FROM `project.dataset.table` WHERE DATE(_PARTITIONTIME) = '2025-01-15' b) WITH deduplicated AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp DESC) as row_num FROM `project.dataset.table` WHERE DATE(_PARTITIONTIME) = '2025-01-15' ) SELECT * EXCEPT(row_num) FROM deduplicated WHERE row_num = 1 c) SELECT * FROM `project.dataset.table` WHERE DATE(_PARTITIONTIME) = '2025-01-15' GROUP BY id, name, value, timestamp d) SELECT * FROM ( SELECT *, RANK() OVER (PARTITION BY id ORDER BY timestamp DESC) as rnk FROM `project.dataset.table` ) WHERE rnk = 1 AND DATE(_PARTITIONTIME) = '2025-01-15'
B WITH deduplicated AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp DESC) as row_num FROM `project.dataset.table` WHERE DATE(_PARTITIONTIME) = '2025-01-15' ) SELECT * EXCEPT(row_num) FROM deduplicated WHERE row_num = 1
215
¿Qué script bash sería el más adecuado para monitorear y reiniciar automáticamente un servicio de procesamiento de datos en caso de fallo en un entorno de producción? a) #!/bin/bash while true; do if ! pgrep -f "python data_processor.py"; then echo "Servicio caído, reiniciando..." python data_processor.py & fi sleep 60 done b) #!/bin/bash service data-processor status > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Servicio caído, reiniciando..." service data-processor restart fi c) #!/bin/bash set -e LOG_FILE="/var/log/data-processor-monitor.log" log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" } check_service() { if systemctl is-active --quiet data-processor; then return 0 else return 1 fi } restart_service() { log "Intentando reiniciar servicio data-processor..." if systemctl restart data-processor; then log "Servicio reiniciado exitosamente" return 0 else log "ERROR: Falló el reinicio del servicio" return 1 fi } Verificar estado del servicio if ! check_service; then log "ALERTA: Servicio data-processor está caído" # Intentar reiniciar if restart_service; then # Verificar si el reinicio fue exitoso sleep 5 if check_service; then log "Servicio funcionando correctamente después del reinicio" # Enviar notificación de recuperación exitosa curl -X POST "https://api.alerts.com/notify" \ -d "message=Servicio recuperado exitosamente" \ -d "level=info" else log "ERROR CRÍTICO: El servicio sigue caído después del reinicio" # Enviar alerta crítica curl -X POST "https://api.alerts.com/notify" \ -d "message=Fallo persistente en servicio data-processor" \ -d "level=critical" fi fi else log "Servicio funcionando correctamente" > /dev/null fi d) #!/bin/bash ps aux | grep data-processor | grep -v grep > /dev/null if [ $? -ne 0 ]; then echo "Reiniciando servicio..." nohup python3 /opt/data-processor/main.py & fi
C #!/bin/bash set -e LOG_FILE="/var/log/data-processor-monitor.log" log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" } check_service() { if systemctl is-active --quiet data-processor; then return 0 else return 1 fi } restart_service() { log "Intentando reiniciar servicio data-processor..." if systemctl restart data-processor; then log "Servicio reiniciado exitosamente" return 0 else log "ERROR: Falló el reinicio del servicio" return 1 fi } Verificar estado del servicio if ! check_service; then log "ALERTA: Servicio data-processor está caído" # Intentar reiniciar if restart_service; then # Verificar si el reinicio fue exitoso sleep 5 if check_service; then log "Servicio funcionando correctamente después del reinicio" # Enviar notificación de recuperación exitosa curl -X POST "https://api.alerts.com/notify" \ -d "message=Servicio recuperado exitosamente" \ -d "level=info" else log "ERROR CRÍTICO: El servicio sigue caído después del reinicio" # Enviar alerta crítica curl -X POST "https://api.alerts.com/notify" \ -d "message=Fallo persistente en servicio data-processor" \ -d "level=critical" fi fi else log "Servicio funcionando correctamente" > /dev/null fi