SQL, linux y python Flashcards

(349 cards)

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 -H fuerza a que grep muestre siempre el nombre de archivo. -n hace que muestre el número de línea donde aparece la coincidencia. La opción a) grep error *.txt funciona para encontrar la palabra “error” en los archivos .txt, pero no cumple el requisito de mostrar el nombre de archivo y el número de línea de cada coincidencia:
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 df (disk free) reporta el uso de espacio de todas las particiones montadas, mostrando total, usado, disponible y punto de montaje. du muestra el uso de espacio por archivos y directorios, no por particiones. free muestra memoria RAM y swap, no disco. top muestra procesos en ejecución y uso de CPU/memoria, no disco.
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
216
¿Cuál es el resultado de [x for x in range(10) if x % 2 == 0]? a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b) [1, 3, 5, 7, 9] c) [0, 2, 4, 6, 8] d) [2, 4, 6, 8, 10].
C [0, 2, 4, 6, 8]
217
¿Qué hace el siguiente código? def infinite_sequence(): num = 0; while True: yield num; num += 1 a) Crea una lista infinita de números empezando desde 0, b) Crea un generador que produce números empezando desde 0 indefinidamente, c) Crea una función que siempre devuelve 0, d) Genera un error de sintaxis.
B Crea un generador que produce números empezando desde 0 indefinidamente.
218
¿Qué hace el comando cat file.txt | grep "error"? a) Muestra todas las líneas en file.txt que contienen la palabra "error", b) Busca la palabra "error" en file.txt y muestra el nombre del archivo, c) Cuenta cuántas veces aparece "error" en file.txt", d) Reemplaza "error" por otra palabra en file.txt`.
A Muestra todas las líneas en file.txt que contienen la palabra "error",
219
¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN? a) INNER JOIN devuelve todas las filas de ambas tablas, mientras que LEFT JOIN devuelve solo las filas coincidentes, b) INNER JOIN devuelve solo las filas coincidentes, mientras que LEFT JOIN devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha, c) No hay diferencia; son sinónimos, d) LEFT JOIN devuelve todas las filas de ambas tablas, mientras que INNER JOIN devuelve solo las filas coincidentes.
B INNER JOIN devuelve solo las filas coincidentes, mientras que LEFT JOIN devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha,
220
¿Cuál de los siguientes códigos Python es más eficiente para procesar grandes volúmenes de datos en memoria? A) Usar bucles for anidados para iterar sobre todos los elementos. B) Utilizar list comprehensions con múltiples condiciones. C) Emplear las funciones map() y filter() con expresiones lambda. D) Implementar operaciones vectorizadas con NumPy.
D Implementar operaciones vectorizadas con NumPy. Cuando iteras en Python con for o incluso con comprehensions, cada paso se ejecuta en el intérprete de Python, con sus costes de despacho de bytecode y comprobaciones de tipo dinámico por elemento. NumPy, en cambio, implementa sus operaciones principales en C (o Fortran), trabajando sobre bloques de memoria contigua y eliminando el overhead de bucle en Python. De este modo, una operación como sumar dos arrays de un millón de elementos se hace en código nativo muy cercano al hardware, en lugar de en bytecode de Python en cada iteración
221
Al trabajar con dataframes de pandas, ¿cuál es la forma más eficiente de aplicar una transformación a múltiples columnas? A) Iterar por cada fila con un bucle for y modificar los valores. B) Utilizar .apply() con una función lambda en cada columna individualmente. C) Utilizar .loc para seleccionar las columnas y aplicar una operación vectorizada. D) Crear un nuevo dataframe y hacer un merge con el original.
C Utilizar .loc para seleccionar las columnas y aplicar una operación vectorizada.
222
¿Qué decorator se utiliza en Python para medir el tiempo de ejecución de una función durante el procesamiento de datos? A) @timeit B) @performance C) @profile D) Python no tiene un decorator estándar para esto; debe implementarse manualmente
D Python no tiene un decorator estándar para esto; debe implementarse manualmente
223
Dado el siguiente código para procesamiento de datos, ¿cuál es su principal problema? def process_large_dataset(filename): data = [] with open(filename, 'r') as f: for line in f: data.append(process_line(line)) return data A) No cierra correctamente el archivo. B) Carga todo el conjunto de datos en memoria, lo que puede causar problemas con archivos grandes. C) La función process_line() no está definida en el fragmento. D) No maneja excepciones durante la lectura del archivo.
B Carga todo el conjunto de datos en memoria, lo que puede causar problemas con archivos grandes.
224
Al utilizar la biblioteca google-cloud-bigquery en Python, ¿cuál es la forma correcta de ejecutar una consulta parametrizada para prevenir inyecciones SQL? A) client.query(f"SELECT * FROM dataset.table WHERE column = '{value}'") B) client.query("SELECT * FROM dataset.table WHERE column = '%s'" % value) C) client.query_and_wait("SELECT * FROM dataset.table WHERE column = @param", parameters=[{"name": "param", "value": value}]) D) client.query("SELECT * FROM dataset.table WHERE column = @param", job_config=bigquery.QueryJobConfig(query_parameters=[bigquery.ScalarQueryParameter("param", "STRING", value)]))
D client.query("SELECT * FROM dataset.table WHERE column = @param", job_config=bigquery.QueryJobConfig(query_parameters=[bigquery.ScalarQueryParameter("param", "STRING", value)]))
225
En un script de procesamiento de datos con Google Cloud Dataflow y Apache Beam, ¿qué significa el siguiente fragmento de código? import apache_beam as beam with beam.Pipeline() as p: (p | 'ReadData' >> beam.io.ReadFromText('gs://bucket/input.txt') | 'ProcessData' >> beam.Map(lambda x: x.upper()) | 'WriteData' >> beam.io.WriteToText('gs://bucket/output.txt')) A) Lee un archivo de texto, convierte todo el texto a mayúsculas y escribe el resultado en otro archivo. B) Lee múltiples archivos del bucket, procesa solo los archivos en mayúsculas y los escribe en un nuevo bucket. C) Realiza una transformación paralela de los datos usando la sintaxis de operadores sobrecargados de Beam. D) Crea una canalización de tres pasos secuenciales que no se ejecutará hasta que se llame al método run().
C Realiza una transformación paralela de los datos usando la sintaxis de operadores sobrecargados de Beam.
226
¿Qué código Python es necesario para configurar correctamente la autenticación al ejecutar un script localmente que accede a recursos de GCP? A) No es necesario código; la autenticación se maneja a través de gcloud CLI. B) ``` from google.cloud import auth auth.authenticate() C) ``` import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/service-account-key.json" D) ``` from google.oauth2 import service_account credentials = service_account.Credentials.from_service_account_file("/path/to/key.json")
C) ``` import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/service-account-key.json"
227
Al utilizar la biblioteca pandas con BigQuery, ¿cuál es el principal beneficio de usar pandas_gbq.read_gbq() en lugar de descargar resultados completos? A) Permite realizar consultas federadas a otras fuentes de datos. B) Puede aplicar procesamiento paralelo a los datos consultados. C) Puede paginar automáticamente conjuntos de resultados grandes. D) Permite gestionar el tamaño de memoria al procesar conjuntos de datos grandes con parámetros como chunksize.
D Permite gestionar el tamaño de memoria al procesar conjuntos de datos grandes con parámetros como chunksize.
228
¿Cuál es la forma más eficiente de cargar un dataframe de pandas a BigQuery cuando el dataframe es demasiado grande para caber en la memoria? A) Dividir manualmente el dataframe en partes más pequeñas y cargar cada parte. B) Guardar el dataframe como CSV y usar el cliente de BigQuery para cargarlo. C) Usar el método to_gbq() con el parámetro if_exists='append' en un bucle. D) Usar pandas_gbq.to_gbq() con if_exists='append' y el parámetro chunksize.
D Usar pandas_gbq.to_gbq() con if_exists='append' y el parámetro chunksize.
229
¿Qué herramienta de Python es más adecuada para implementar una canalización ETL escalable en GCP? A) pandas con funciones de procesamiento personalizado B) Dask para procesamiento paralelo de datos C) Apache Beam con el runner de Dataflow D) PySpark ejecutado en Cloud Dataproc
C Apache Beam con el runner de Dataflow
230
¿Cuál es la forma correcta de implementar un script Python que se ejecute periódicamente para monitorear el estado de varios recursos en GCP? A) Usar una instancia de Compute Engine con un cron job que ejecute el script. B) Implementar una Cloud Function y configurar Cloud Scheduler para activarla. C) Utilizar App Engine con handlers programados para ejecutar el script. D) Todas las anteriores son válidas dependiendo del caso de uso.
D Todas las anteriores son válidas dependiendo del caso de uso.
231
Dado el siguiente fragmento de un script Python para procesar archivos en Cloud Storage, ¿cuál es su principal deficiencia? from google.cloud import storage def process_files(): client = storage.Client() bucket = client.get_bucket('my-bucket') blobs = bucket.list_blobs() for blob in blobs: content = blob.download_as_string() process_content(content) A) No maneja errores durante la descarga o procesamiento de archivos. B) Descarga todos los archivos en memoria, lo que podría causar problemas con archivos grandes. C) No filtra los archivos por tipo antes de procesarlos. D) El método list_blobs() podría no devolver todos los blobs si hay miles en el bucket.
D El método list_blobs() podría no devolver todos los blobs si hay miles en el bucket.
232
¿Cuál de los siguientes enfoques es el más adecuado para gestionar credenciales sensibles en un script Python que interactúa con GCP? A) Almacenar las credenciales directamente en el código. B) Usar variables de entorno para almacenar las credenciales. C) Leer las credenciales desde un archivo protegido en el sistema de archivos. D) Utilizar Secret Manager de GCP y recuperar las credenciales durante la ejecución.
D Utilizar Secret Manager de GCP y recuperar las credenciales durante la ejecución.
233
¿Qué comando Linux es más útil para monitorear el uso de recursos de un proceso de Python que está procesando un gran conjunto de datos? A) top -p B) ps aux | grep python C) htop -p D) vmstat
C htop -p
234
¿Qué hace el siguiente comando en un sistema Linux? find /path/to/data -name "*.csv" -mtime -7 | xargs -I {} gzip {} A) Encuentra todos los archivos CSV en /path/to/data y los comprime con gzip. B) Encuentra los archivos CSV creados en los últimos 7 días y los comprime. C) Encuentra archivos CSV modificados en los últimos 7 días y los comprime. D) Comprime solo los archivos CSV vacíos en /path/to/data.
C Encuentra archivos CSV modificados en los últimos 7 días y los comprime.
235
¿Cuál de los siguientes scripts bash realizaría correctamente una copia de seguridad de todos los buckets de Cloud Storage de un proyecto? A) #!/bin/bash gsutil ls | while read bucket; do gsutil -m cp -r $bucket gs://backup-bucket/ done B) #!/bin/bash buckets=$(gsutil ls) for bucket in $buckets; do gsutil -m cp -r $bucket gs://backup-bucket/ done C) #!/bin/bash project=$(gcloud config get-value project) gsutil ls | while read bucket; do bucket_name=$(basename $bucket) gsutil -m rsync -r $bucket gs://backup-bucket/$bucket_name/ done D) Ninguna de las anteriores es correcta debido a limitaciones fundamentales en cómo gsutil maneja las rutas.
C) #!/bin/bash project=$(gcloud config get-value project) gsutil ls | while read bucket; do bucket_name=$(basename $bucket) gsutil -m rsync -r $bucket gs://backup-bucket/$bucket_name/ done
236
¿Qué hace el siguiente script bash cuando se ejecuta en un entorno GCP? #!/bin/bash today=$(date +%Y-%m-%d) bq query --use_legacy_sql=false \ "SELECT * FROM dataset.table WHERE date = '$today'" \ | grep -v "Waiting" > /tmp/results_$today.csv if [ -s /tmp/results_$today.csv ]; then gsutil cp /tmp/results_$today.csv gs://my-bucket/reports/ else echo "No data for $today" | mail -s "Empty report" admin@example.com fi A) Ejecuta una consulta en BigQuery para la fecha actual, guarda los resultados en un archivo CSV y lo copia a Cloud Storage si contiene datos, de lo contrario envía un correo. B) Verifica si hay datos nuevos en BigQuery para la fecha actual y genera un informe si los encuentra. C) Extrae datos de BigQuery diariamente y los almacena en Cloud Storage para su posterior análisis. D) Realiza una consulta para verificar si una tabla de BigQuery tiene datos para la fecha actual.
A Ejecuta una consulta en BigQuery para la fecha actual, guarda los resultados en un archivo CSV y lo copia a Cloud Storage si contiene datos, de lo contrario envía un correo.
237
¿Cuál de las siguientes consultas SQL es más eficiente en BigQuery para analizar datos particionados por fecha? A) SELECT event_date, COUNT(*) FROM dataset.table WHERE event_date >= '2023-01-01' GROUP BY event_date B) SELECT event_date, COUNT(*) FROM dataset.table WHERE CAST(event_date AS DATE) >= '2023-01-01' GROUP BY event_date C) SELECT DATE(timestamp) as event_date, COUNT(*) FROM dataset.table WHERE DATE(timestamp) >= '2023-01-01' GROUP BY event_date D) SELECT event_date, COUNT(*) FROM dataset.table WHERE EXTRACT(YEAR FROM event_date) >= 2023 GROUP BY event_date
A SELECT event_date, COUNT(*) FROM dataset.table WHERE event_date >= '2023-01-01' GROUP BY event_date
238
En BigQuery, ¿cuál de las siguientes funciones de ventana SQL identificaría correctamente registros duplicados en una tabla grande? A) SELECT * FROM ( SELECT *, COUNT(*) OVER (PARTITION BY id) as count FROM dataset.table ) WHERE count > 1 B) SELECT * FROM dataset.table a WHERE EXISTS ( SELECT 1 FROM dataset.table b WHERE a.id = b.id AND a.row_id != b.row_id ) C) SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp) as row_num FROM dataset.table HAVING row_num > 1 D) WITH numbered AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp) as row_num FROM dataset.table ) SELECT * FROM numbered WHERE row_num > 1
D WITH numbered AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp) as row_num FROM dataset.table ) SELECT * FROM numbered WHERE row_num > 1
239
¿Cuál de las siguientes consultas SQL en BigQuery sería más eficiente para calcular la media móvil de 7 días de ventas diarias? A) SELECT date, (SELECT AVG(sales) FROM dataset.sales WHERE date BETWEEN DATE_SUB(s.date, INTERVAL 6 DAY) AND s.date) as moving_avg FROM dataset.sales s ORDER BY date B) SELECT date, AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as moving_avg FROM dataset.sales ORDER BY date C) WITH daily AS ( SELECT date, SUM(sales) as daily_sales FROM dataset.sales GROUP BY date ) SELECT date, AVG(daily_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as moving_avg FROM daily ORDER BY date D) SELECT current.date, (SELECT SUM(sales)/7 FROM dataset.sales WHERE date BETWEEN DATE_SUB(current.date, INTERVAL 6 DAY) AND current.date) as moving_avg FROM dataset.sales as current GROUP BY current.date ORDER BY current.date
B SELECT date, AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as moving_avg FROM dataset.sales ORDER BY date
240
¿Qué imprime este script? def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3, [])) print(f(4)) A) [1] [2] [3] [4] B) [1] [1,2] [3] [1,2,4] C) [1] [1,2] [3] [1,2,3,4] D) Error en tiempo de ejecucion
B [1] [1,2] [3] [1,2,4] 1)Primera llamada print(f(1)) Se usa el parámetro por defecto L = []. Dentro de la función se hace L.append(1), de modo que L pasa a ser [1]. Se devuelve [1] e imprime [1]. 2)Segunda llamada print(f(2)) Ahora, como no se pasó nada para L, vuelve a usarse el mismo objeto lista que quedó de la llamada anterior (ahora es [1]). Se hace L.append(2), con lo que esa lista muta a [1, 2]. Se devuelve [1, 2] e imprime [1, 2]. 3)Tercera llamada print(f(3, [])) Aquí sí pasamos un nuevo argumento L=[], por lo que dentro de la función L es esa lista recién creada. Se hace L.append(3), resultando en [3]. Se devuelve [3] e imprime [3]. 4)Cuarta llamada print(f(4)) Al no pasar lista, vuelve a utilizarse el parámetro por defecto, que es la misma lista que quedó tras la segunda llamada (actualmente [1, 2]). Se hace L.append(4), transformándola en [1, 2, 4]. Se devuelve [1, 2, 4] e imprime [1, 2, 4]. Este comportamiento se debe a que los parámetros por defecto en Python se evalúan una sola vez, al definir la función, y si son objetos mutables (como una lista), su contenido persiste entre llamadas.
241
¿Cuál es la salida de este fragmento? x = [1,2,3,4] y = x x += [5,6] print(x, y) A) [1,2,3,4,5,6] [1,2,3,4] B) [1,2,3,4,5,6] [1,2,3,4,5,6] C) Error D) [1,2,3,4] [1,2,3,4,5,6]
B [1,2,3,4,5,6] [1,2,3,4,5,6]
242
¿Qué expresión genera un diccionario que asocia cada número de 1 a 5 con su cuadrado? A) {i:i ** 2 for i in range(1,6)} B) dict(range(1,6), i ** 2) C) {i^2: i for i in range(1,6)} D) [(i, i ** 2) for i in range(1,6)]
A {i:i ** 2 for i in range(1,6)}
243
¿Qué valor tiene result tras ejecutar? import functools, operator result = functools.reduce(operator.mul, [1,2,3,4], 2) A) 24 B) 48 C) 10 D) Error
B 48 1) Se proporciona 2 como valor inicial (el tercer parámetro de reduce). 2) Se multiplica el acumulador (que arranca en 2) por el primer elemento de la lista (1): acumulador = 2 * 1 → 2 3)Siguientes pasos Segundo elemento (2): acumulador = 2 * 2 → 4 Tercer elemento (3): acumulador = 4 * 3 → 12 Cuarto elemento (4): acumulador = 12 * 4 → 48 4) Resultado final Al terminar, reduce devuelve el acumulador, que es 48.
244
En un script de Python, ¿qué instrucción usas para capturar tanto IOError como cualquier otra excepción? A) try: … except IOError, Exception: … B) try: … except (IOError, Exception): … C) try: … except IOError or Exception: … D) try: … except Exception as e: …
D try: … except Exception as e: …
245
¿Cuál de estas opciones crea y ejecuta un script Python desde línea de comandos pasando un parámetro? A) python3 -c "script.py arg" B) ./script.py arg (con #!/usr/bin/env python3 y permiso de ejecución) C) python3 script.py:arg D) python3 script.py
B ./script.py arg (con #!/usr/bin/env python3 y permiso de ejecución)
246
¿Qué devuelve esta función? def g(): try: return 1 finally: return 2 x = g() A) 1 B) 2 C) None D) Error
B 2 En el bloque try se ejecuta return 1, lo que prepara devolver el valor 1. Antes de completar ese retorno, Python ejecuta el bloque finally. En el finally hay otro return 2, y ese retorno sobrescribe el retorno previo de
247
Para leer un fichero CSV línea a línea en Python y transformarlo en lista de diccionarios, ¿qué módulo conviene usar? A) json B) csv C) os D) pickle
B El módulo csv.DictReader lee cada fila como dict clave→valor.
248
¿Cuál es la sentencia para obtener el número de empleados por departamento? empleados(id, nombre, dept_id) departamentos(dept_id, dept_name) A) SELECT dept_name, COUNT(*) FROM empleados JOIN departamentos USING(id) GROUP BY dept_name; B) SELECT d.dept_name, COUNT(*) FROM empleados e JOIN departamentos d ON e.dept_id = d.dept_id GROUP BY d.dept_name; C) SELECT dept_id, COUNT(nombre) FROM empleados GROUP BY nombre; D) SELECT dept_name, dept_id FROM departamentos GROUP BY dept_id;
B SELECT d.dept_name, COUNT(*) FROM empleados e JOIN departamentos d ON e.dept_id = d.dept_id GROUP BY d.dept_name;
249
¿Qué cláusula limita el número de filas resultado en PostgreSQL? A) TOP 10 B) LIMIT 10 C) ROWNUM <= 10 D) FETCH FIRST 10 ROWS ONLY
B LIMIT 10 En PostgreSQL se usa LIMIT. (Oracle usaría ROWNUM, SQL Server TOP).
250
¿Qué operación elimina duplicados en una consulta? A) SELECT DISTINCT columna … B) SELECT UNIQUE columna … C) SELECT columna … GROUP BY columna D) Todas las anteriores
A SELECT DISTINCT columna …
251
¿Qué comando muestra los procesos en ejecución junto con su árbol de hijos? A) ps aux B) top C) pstree D) jobs
C pstree
252
En un script Bash, ¿cómo compruebas que la variable $FILE existe y es legible? A) [ -e $FILE ] B) [ -r $FILE ] C) [ -w $FILE ] D) [ -x $FILE ]
B [ -r $FILE ]
253
¿Qué hace chmod 750 script.sh? A) Usuario rwx, grupo rw-, otros — B) Usuario rwx, grupo r-x, otros — C) Usuario r-x, grupo rwx, otros — D) Usuario rw-, grupo r-x, otros r-x
B Usuario rwx, grupo r-x, otros —
254
¿Cuál es la forma correcta de abrir un archivo para escritura en Python? a) file = open("datos.txt", "write") b) file = open("datos.txt", "w") c) file = open("datos.txt", "a+") d) file = write("datos.txt")
B file = open("datos.txt", "w")
255
¿Qué generará este código? def generador(): for i in range(3): yield i gen = generador() next(gen) print(next(gen)) a) 0 b) 1 c) 2 d) 3
B 1 ¿Por qué? Al llamar a generador() se crea un generador que producirá secuencialmente 0, 1 y 2. La primera llamada next(gen) extrae el primer valor del generador, que es 0, pero no lo imprimimos. La segunda llamada next(gen), que está dentro del print(), extrae el siguiente valor disponible, que es 1, y ese es el que se muestra por pantalla. En resumen, el primer next(gen) descarta el 0, y el print(next(gen)) imprime el 1.
256
¿Cuál es el resultado de este código? try: print(10/0) except ZeroDivisionError: print("Error de división") finally: print("Fin") a) Error y se detiene el programa b) "Error de división" y "Fin" c) Solo "Error de división" d) Solo "Fin"
B "Error de división" y "Fin"
257
¿Qué imprimirá el siguiente código? class Animal: def __init__(self, nombre): self.nombre = nombre def hablar(self): return "Sonido" class Perro(Animal): def hablar(self): return "Guau" animal = Perro("Fido") print(animal.nombre + " dice " + animal.hablar()) a) "Fido dice Sonido" b) "Fido dice Guau" c) Error d) "dice Guau"
B "Fido dice Guau"
258
En pandas, ¿qué código selecciona todas las filas donde la columna 'edad' es mayor que 30? a) df.where(df['edad'] > 30) b) df[df.edad > 30] c) df.query('edad > 30') d) Tanto b) como c) son correctas
D Tanto b) como c) son correctas
259
¿Qué hace este script de Python? import os import sys if len(sys.argv) != 2: print("Uso: python script.py directorio") sys.exit(1) directorio = sys.argv[1] if not os.path.isdir(directorio): print(f"Error: {directorio} no es un directorio válido") sys.exit(1) for archivo in os.listdir(directorio): if archivo.endswith('.txt'): ruta_completa = os.path.join(directorio, archivo) print(f"Archivo de texto encontrado: {ruta_completa}") a) Crea archivos .txt en un directorio b) Lista todos los archivos en un directorio c) Lista solo los archivos .txt en un directorio especificado como argumento d) Elimina archivos .txt de un directorio
C Lista solo los archivos .txt en un directorio especificado como argumento
260
¿Qué crea el siguiente código? import numpy as np import pandas as pd Crear datos aleatorios np.random.seed(42) datos = np.random.randn(100, 4) Crear DataFrame df = pd.DataFrame(datos, columns=['A', 'B', 'C', 'D']) Operación resultado = df.groupby(df['A'] > 0).mean() a) Un DataFrame con la media de cada columna agrupada por valores positivos/negativos de la columna A b) Un DataFrame con todos los valores positivos de la columna A c) Un error, porque no se puede agrupar por una expresión booleana d) Un DataFrame con la suma de todas las columnas
A Un DataFrame con la media de cada columna agrupada por valores positivos/negativos de la columna A
261
¿Cuál es la consulta SQL correcta para seleccionar todos los empleados cuyo salario sea mayor que el promedio de todos los salarios? a) SELECT * FROM empleados WHERE salario > (SELECT salario FROM empleados); b) SELECT * FROM empleados WHERE salario > AVG(salario); c) SELECT * FROM empleados WHERE salario > (SELECT AVG(salario) FROM empleados); d) SELECT * FROM empleados HAVING salario > AVG(salario);
C SELECT * FROM empleados WHERE salario > (SELECT AVG(salario) FROM empleados);
262
¿Qué tipo de JOIN muestra todos los departamentos, incluso si no tienen empleados asignados? a) INNER JOIN b) LEFT JOIN c) RIGHT JOIN d) FULL JOIN
B LEFT JOIN
263
¿Cuál es la sintaxis correcta para crear una tabla en SQL? a) CREATE TABLE empleados (id INT, nombre VARCHAR(50), salario DECIMAL(10,2)); b) CREATE TABLE empleados = (id INT, nombre VARCHAR(50), salario DECIMAL(10,2)); c) MAKE TABLE empleados (id INT, nombre VARCHAR(50), salario DECIMAL(10,2)); d) INSERT TABLE empleados (id INT, nombre VARCHAR(50), salario DECIMAL(10,2));
A CREATE TABLE empleados (id INT, nombre VARCHAR(50), salario DECIMAL(10,2));
264
¿Qué consulta SQL devuelve el número de ventas por producto ordenadas de mayor a menor? a) SELECT producto, COUNT(*) FROM ventas ORDER BY COUNT(*) DESC; b) SELECT producto, COUNT(*) AS total FROM ventas GROUP BY producto ORDER BY total DESC; c) SELECT producto, SUM(cantidad) FROM ventas ORDER BY SUM(cantidad) DESC; d) SELECT producto, COUNT(*) FROM ventas GROUP BY producto DESC;
B SELECT producto, COUNT(*) AS total FROM ventas GROUP BY producto ORDER BY total DESC;
265
¿Qué hace la siguiente consulta SQL? SELECT departamento, AVG(salario) as promedio FROM empleados GROUP BY departamento HAVING AVG(salario) > 3000; a) Muestra el salario promedio de todos los departamentos b) Muestra los departamentos con al menos un empleado que gane más de 3000 c) Muestra los departamentos cuyo salario promedio sea mayor que 3000 d) Muestra todos los empleados que ganan más de 3000 agrupados por departamento
C Muestra los departamentos cuyo salario promedio sea mayor que 3000
266
¿Qué comando Linux se utiliza para mostrar el espacio en disco de los sistemas de archivos montados? a) ls -l b) df -h c) du -sh d) free -m
B df -h
267
¿Qué hace el siguiente comando de Bash? grep -r "error" /var/log/ | wc -l a) Cuenta cuántas veces aparece la palabra "error" en todos los archivos dentro de /var/log/ b) Muestra todas las líneas que contienen "error" en /var/log/ c) Renombra todos los archivos que contienen "error" en /var/log/ d) Elimina todas las líneas que contienen "error" en /var/log/
A Cuenta cuántas veces aparece la palabra "error" en todos los archivos dentro de /var/log/
268
¿Qué permisos representa el valor numérico 755 en Linux? a) rwxr--r-- b) rwxr-xr-x c) r-xrwxr-x d) rw-r--r--
B rwxr-xr-x
269
¿Qué hace el siguiente script de Bash? #!/bin/bash for file in *.csv; do if [ -f "$file" ]; then nombre="${file%.csv}" mkdir -p procesados mv "$file" procesados/"$nombre"_$(date +%Y%m%d).csv fi done a) Elimina todos los archivos .csv b) Mueve todos los archivos .csv a un directorio llamado "procesados" y les añade la fecha actual c) Crea copias de seguridad de los archivos .csv d) Convierte archivos .csv a .txt
B Mueve todos los archivos .csv a un directorio llamado "procesados" y les añade la fecha actual
270
¿Qué comando usarías para cambiar los permisos de un archivo llamado "datos.txt" para que solo el propietario pueda leerlo y escribirlo? a) chmod 600 datos.txt b) chmod 700 datos.txt c) chmod 644 datos.txt d) chmod 755 datos.txt
A chmod 600 datos.txt
271
¿Cuál será la salida del siguiente código Python? my_list = [1, 2, 3, 4, 5] print(my_list[1:4]) a) [1, 2, 3, 4] b) [1, 2, 3] c) [2, 3, 4] d) [2, 3, 4, 5]
C [2, 3, 4]
272
¿Qué hace el siguiente fragmento de código Python? data = {"nombre": "Ana", "edad": 28, "ciudad": "Madrid"} print(data.get("profesion", "No especificada")) a) Imprime "Ana". b) Genera un error KeyError. c) Imprime "No especificada". d) Imprime None.
C Imprime "No especificada".
273
Considera la siguiente función: def calcular_cuadrados(numeros): cuadrados = [] for n in numeros: cuadrados.append(n * n) return cuadrados resultado = calcular_cuadrados([1, 2, 3]) print(resultado) ¿Cuál es la salida? a) [1, 2, 3] b) [1, 4, 9] c) [2, 4, 6] d) 6
B [1, 4, 9]
274
Estás escribiendo un script de Python llamado procesar.py que necesita leer el nombre de un archivo pasado como argumento desde la línea de comandos. Si ejecutas el script así: python procesar.py datos.csv, ¿cómo accederías al nombre de archivo "datos.csv" dentro del script? a) import sys; filename = sys.argv[0] b) import argparse; filename = argparse.args[1] c) import os; filename = os.args[1] d) import sys; filename = sys.argv[1]
D import sys; filename = sys.argv[1]
275
¿Cuál de las siguientes opciones describe mejor lo que hace una list comprehension en Python? a) Define una función que opera sobre una lista. b) Es una forma concisa de crear listas basada en iterables existentes. c) Es un método para ordenar los elementos de una lista. d) Comprueba si un elemento existe dentro de una lista.
B Es una forma concisa de crear listas basada en iterables existentes.
276
Si necesitas leer el contenido de un archivo de texto llamado config.txt línea por línea en Python, ¿cuál de los siguientes enfoques es el más idiomático y eficiente en memoria para archivos grandes? A) with open('config.txt', 'r') as f: contenido = f.read() lineas = contenido.splitlines() for linea in lineas: print(linea) B) f = open('config.txt', 'r') for linea in f: print(linea.strip()) f.close() C) with open('config.txt', 'r') as f: for linea in f: print(linea.strip()) D) with open('config.txt', 'r') as f: lineas = f.readlines() for linea in lineas: print(linea)
C with open('config.txt', 'r') as f: for linea in f: print(linea.strip())
277
Dada una tabla Productos con columnas ID_Producto (int), Nombre (varchar), Precio (decimal) y Stock (int). ¿Cuál consulta SQL seleccionarías para obtener solo el nombre y el precio de los productos que cuestan más de 50? a) SELECT Nombre, Precio FROM Productos WHERE Precio > 50; b) SELECT * FROM Productos WHERE Precio > 50; c) GET Nombre, Precio FROM Productos IF Precio > 50; d) SELECT Nombre, Precio WHERE Precio > 50 FROM Productos;
A SELECT Nombre, Precio FROM Productos WHERE Precio > 50;
278
Tienes dos tablas: Clientes (ID_Cliente, Nombre) y Pedidos (ID_Pedido, ID_Cliente, Fecha). Quieres obtener una lista de todos los pedidos junto con el nombre del cliente que realizó cada pedido. ¿Qué tipo de operación SQL usarías? a) UNION b) GROUP BY c) JOIN d) SUBQUERY
C JOIN
279
¿Cuál es el propósito principal de la cláusula GROUP BY en SQL? a) Ordenar los resultados de una consulta. b) Filtrar filas basadas en una condición especificada. c) Combinar filas de múltiples tablas. d) Agrupar filas que tienen los mismos valores en una o más columnas, para poder aplicar funciones de agregación (como COUNT, SUM, AVG) a cada grupo.
D Agrupar filas que tienen los mismos valores en una o más columnas, para poder aplicar funciones de agregación (como COUNT, SUM, AVG) a cada grupo.
280
Estás en una terminal de Linux y quieres ver el contenido del directorio actual, incluyendo los archivos ocultos. ¿Qué comando usarías? a) ls b) ls -a c) dir d) show --all
B ls -a
281
Has descargado un script de shell llamado mi_script.sh. Intentas ejecutarlo con ./mi_script.sh pero obtienes un error de "Permiso denegado". ¿Qué comando usarías para hacer que el script sea ejecutable por ti (el propietario)? a) chown +x mi_script.sh b) chmod u+x mi_script.sh c) setexec mi_script.sh d) runnable mi_script.sh
B chmod u+x mi_script.sh
282
En un script de Bash, tienes una variable definida como ARCHIVO="/home/usuario/datos.txt". ¿Cómo usarías esta variable para mostrar la ruta completa del archivo con el comando echo? a) echo ARCHIVO b) echo %ARCHIVO% c) echo $ARCHIVO d) echo &ARCHIVO
C echo $ARCHIVO
283
¿Cuáles son las bibliotecas más populares para procesar datos en Python, y cómo se usan en ingeniería de datos?
NumPy y Pandas. NumPy es para cálculos numéricos, y Pandas para manipular y analizar datos tabulares, esenciales en ingeniería de datos.
284
¿Qué es el suavizado de datos y por qué se usa en ingeniería de datos?
Es una técnica para reducir ruido y resaltar patrones, usada para analizar tendencias en series temporales. Métodos como promedios móviles ayudan a limpiar datos y facilitar el análisis.
285
Estás analizando volcados CSV diarios en Google BigQuery. ¿Cómo aseguras que tus consultas SQL no procesen datos corruptos?
Usa un pipeline por lotes de Google Cloud Dataflow para importar datos a BigQuery y envía errores a una tabla de "cartas muertas" para análisis. Dataflow permite preprocesar datos, filtrar corruptos y mantener la calidad antes de cargar en BigQuery.
286
¿Cuál es el propósito del comando grep en Linux, y cómo se puede usar en tareas de ingeniería de datos?
Busca cadenas o patrones en archivos; útil para filtrar logs o extraer datos específicos. grep error filename.log encuentra líneas con "error" en un log, útil para análisis.
287
¿Qué comando de Linux muestra las últimas 10 líneas de un archivo, y cómo se puede usar para monitorear un log en tiempo real?
El comando tail, con -f para monitoreo en tiempo real. Ejemplo: tail -f /var/log/nginx/access.log actualiza automáticamente, ideal para logs en ingeniería de datos.
288
Tienes un DataFrame df con columnas 'A', 'B' y 'C'. Necesitas crear una nueva columna 'D' que sea la suma de 'A' y 'B' solo para filas donde 'C' > 10 y 'A' es par, y 0 para las demás filas. ¿Cuál es la opción correcta? A) df['D'] = (df['A'] + df['B']) if (df['C'] > 10) & (df['A'] % 2 == 0) else 0 B) df['D'] = np.where((df['C'] > 10) & (df['A'] % 2 == 0), df['A'] + df['B'], 0) C) df.loc[(df['C'] > 10) & (df['A'] % 2 == 0), 'D'] = df['A'] + df['B'] D) df['D'] = 0; df.loc[(df['C'] > 10) & (df['A'] % 2 == 0), 'D'] = df['A'] + df['B']
B df['D'] = np.where((df['C'] > 10) & (df['A'] % 2 == 0), df['A'] + df['B'], 0) Explicación: La opción B usa np.where, que es eficiente para asignaciones condicionales en Pandas, asegurando que 'D' sea 0 donde no se cumple la condición.
289
Escribe una función Python que tome una lista de enteros y devuelva una nueva lista con solo los números pares, en orden inverso. Ejemplo: entrada [1, 2, 3, 4, 5, 6], salida [6, 4, 2].
def get_even_reverse(nums): return [x for x in reversed(nums) if x % 2 == 0] Usa una comprensión de lista con reversed(nums) para iterar en orden inverso y filtra los pares con x % 2 == 0, eficiente en memoria.
290
Escribe un script Bash que encuentre todos los archivos en el directorio actual y subdirectorios mayores a 10MB, imprima sus nombres y tamaños en formato legible, y ordene por tamaño descendente.
find . -type f -size +10M -exec du -h {} \; | sort -rh find localiza archivos, du -h muestra tamaños legibles, y sort -rh ordena en reversa por tamaño.
291
Al crear un entorno virtual en Python, ¿cuál es la secuencia correcta de comandos? a) python -m venv my_env && ./my_env/activate && pip install pandas b) python3 -m venv my_env && source my_env/bin/activate && pip install pandas c) pip install venv && python -m venv my_env && my_env/activate d) venv create my_env && venv activate && pip install pandas
B python3 -m venv my_env && source my_env/bin/activate && pip install pandas
292
¿Qué comando permite guardar la lista de paquetes instalados en un entorno virtual para replicarlo posteriormente? a) pip save > packages.txt b) pip list > requirements.txt c) pip freeze > requirements.txt d) python -m pip export requirements.txt
C pip freeze > requirements.txt
293
En un DataFrame de Pandas, ¿qué diferencia existe entre .loc y .iloc? a) .loc permite filtrar por índice mientras que .iloc no lo permite b) .loc selecciona por etiqueta mientras que .iloc selecciona por posición numérica c) .loc es más rápido para grandes conjuntos de datos d) .iloc solo funciona con columnas numéricas
B .loc selecciona por etiqueta mientras que .iloc selecciona por posición numérica
294
¿Cuál es la forma más eficiente de leer un archivo CSV muy grande en Pandas para evitar problemas de memoria? a) pd.read_csv('archivo.csv', low_memory=True) b) pd.read_csv('archivo.csv', chunksize=10000) c) pd.read_csv('archivo.csv', memory_efficient=True) d) pd.read_csv('archivo.csv', batch_mode=True)
B pd.read_csv('archivo.csv', chunksize=10000)
295
¿Cuál sería el código correcto para validar que un objeto es una Serie de Pandas y lanzar un error si no lo es? a) if not isinstance(s, pd.Series): print("Error") b) try: s.is_series() except: print("Error") c) assert isinstance(s, pd.Series), "Input must be a pandas Series" d) pd.validate_series(s)
C assert isinstance(s, pd.Series), "Input must be a pandas Series"
296
¿Cuál es la salida del siguiente código? try: print(1/0) except ZeroDivisionError: print("División por cero") finally: print("Finalizado") a) Error: división por cero b) División por cero\nFinalizado c) Finalizado d) El programa se detiene sin imprimir nada
B División por cero\nFinalizado
297
¿Qué valor devuelve la expresión (False and False) or (not False)? a) False b) True c) None d) Depende del contexto
B True
298
¿Cuál es el resultado de la siguiente expresión: bool("") or bool(0) or bool([]) or bool(False)? a) True b) False c) ValueError d) None
B False
299
¿Qué hace el siguiente decorador? def timer(func): def wrapper(): import time start = time.time() func() end = time.time() print(f"Tiempo: {end-start}") return wrapper a) Previene que la función decorada genere errores b) Mide el tiempo de ejecución de la función decorada c) Limita el tiempo de ejecución de la función decorada d) Optimiza la función para que se ejecute más rápido
B Mide el tiempo de ejecución de la función decorada
300
¿Qué problema tiene el siguiente código? def process_data(data, filter_func=lambda x: x > 0): filter_func.cached = True return [i for i in data if filter_func(i)] a) Las lambdas no pueden tener atributos como .cached b) La expresión lambda está mal formada c) No se puede usar lambda como valor por defecto d) No hay problema, el código es correcto
A Las lambdas no pueden tener atributos como .cached
301
¿Qué comando bash encontrará todos los archivos .py que contengan la palabra "pandas" dentro del directorio actual y sus subdirectorios? a) find . -type f -name ".py" | grep "pandas" b) find . -type f -name ".py" -exec grep -l "pandas" {} ; c) grep -r "pandas" --include="*.py" . d) ls -R | grep ".py" | xargs grep "pandas"
C grep -r "pandas" --include="*.py" .
302
En un script bash, ¿cuál es la forma correcta de verificar si un directorio existe y crear uno nuevo si no existe? a) if [ ! -d "$DIR" ]; then mkdir -p "$DIR"; fi b) if not exists "$DIR"; then mkdir "$DIR"; fi c) mkdir "$DIR" 2>/dev/null d) test -d "$DIR" || mkdir "$DIR"
A if [ ! -d "$DIR" ]; then mkdir -p "$DIR"; fi
303
¿Cuál es la diferencia entre los comandos > y >> en bash? a) > es para redirección de entrada y >> para redirección de salida b) > sobrescribe el archivo, mientras que >> añade al final c) > funciona en todos los shells y >> solo en bash d) > redirige stdout y >> redirige stderr
B > sobrescribe el archivo, mientras que >> añade al final
304
En BigQuery, ¿cuál es la forma correcta de crear una tabla particionada por fecha? a) CREATE TABLE dataset.table (campo1 INT64, fecha DATE) PARTITION BY DATE(fecha) b) CREATE TABLE dataset.table (campo1 INT64, fecha DATE) WITH PARTITION KEY (fecha) c) CREATE TABLE dataset.table (campo1 INT64, fecha DATE) PARTITIONED BY fecha d) CREATE OR REPLACE TABLE dataset.table (campo1 INT64, fecha DATE) PARTITION BY DATE_TRUNC(fecha, DAY)
D CREATE OR REPLACE TABLE dataset.table (campo1 INT64, fecha DATE) PARTITION BY DATE_TRUNC(fecha, DAY)
305
¿Qué consulta SQL calcularía correctamente la mediana de una columna 'valor' en BigQuery? a) SELECT MEDIAN(valor) FROM tabla b) SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY valor) FROM tabla c) SELECT APPROX_QUANTILES(valor, 100)[OFFSET(50)] FROM tabla d) SELECT AVG(valor) FROM (SELECT TOP 50 PERCENT valor FROM tabla ORDER BY valor)
C SELECT APPROX_QUANTILES(valor, 100)[OFFSET(50)] FROM tabla
306
Para unir dos tablas en SQL y mantener solo los registros que existen en ambas, ¿qué tipo de JOIN utilizarías? a) LEFT JOIN b) RIGHT JOIN c) INNER JOIN d) FULL OUTER JOIN
C INNER JOIN
307
¿Qué servicio de Google Cloud Platform es más adecuado para la orquestación de flujos de trabajo en pipelines de datos? a) Google Kubernetes Engine b) Cloud Functions c) Cloud Composer (Apache Airflow) d) App Engine
C Cloud Composer (Apache Airflow)
308
Al utilizar pandas con BigQuery, ¿cuál es la forma más eficiente de cargar un DataFrame grande a una tabla? a) Exportar a CSV y luego cargar con bq load b) Usar pandas_gbq con el método to_gbq() y el parámetro if_exists='append' c) Convertir el DataFrame a JSON y usar Cloud Functions d) Usar pandas_gbq con el método to_gbq() y el parámetro chunksize
D Usar pandas_gbq con el método to_gbq() y el parámetro chunksize
309
¿Qué sucede al ejecutar el siguiente código de Python? print(0 or 'a') print(0 and 0.0) a) Imprime: False, 0 b) Imprime: 0, False c) Imprime: a, 0 d) Genera un error de tipo
C Imprime: a, 0 1) 0 or 'a' → 'a' El operador or en Python evalúa el primer operando; si es “truthy” lo devuelve, y si es “falsy” devuelve el segundo. 0 se considera falsy, así que la expresión retorna directamente el segundo operando, la cadena 2) 0 and 0.0 → 0 El operador and evalúa el primer operando; si es falsy, lo devuelve de inmediato sin evaluar el segundo (cortocircuito). Aquí, el primer operando es 0 (falsy), de modo que la expresión entera devuelve 0 sin llegar a mirar 0.0.
310
¿Qué salida produce este script? def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3, [])) print(f(4)) a) [1] [2] [3] [4] b) [1] [1, 2] [3] [1, 2, 4] c) [1] [1, 2] [3] [1, 2, 3, 4] d) Error en tiempo de ejecución
B [1] [1, 2] [3] [1, 2, 4]
311
¿Cuál de estas expresiones crea un diccionario que mapea cada carácter de la cadena s = "data" a su índice en la cadena, usando comprensión? A) {i: c for c, i in enumerate(s)} B) {c: i for i, c in enumerate(s)} C) {i: s.index(i) for i in s} D) dict(zip(s, range(len(s))))
B {c: i for i, c in enumerate(s)}
312
Tienes un archivo CSV con dos columnas: name,score. Quieres sumar todos los valores de score. ¿Cuál es la forma más directa en Python? A) import csv total = 0 for row in csv.reader(open("fichero.csv")): total += int(row[1]) B) import pandas as pd total = pd.read_csv("fichero.csv")["score"].sum() C) total = sum(int(line.split(",")[1]) for line in open("fichero.csv")) D) Todas las anteriores funcionan
D Todas las anteriores funcionan
313
¿Qué hace este fragmento? import sys args = sys.argv[1:] print([int(x) for x in args if x.isdigit()]) A) Imprime argumentos no numéricos B) Convierte todos los argumentos en enteros C) Filtra e imprime sólo los argumentos que son dígitos, convertidos a enteros D) Lanzará siempre ValueError
C Filtra e imprime sólo los argumentos que son dígitos, convertidos a enteros
314
Señala la afirmación FALSA sobre manejo de excepciones en Python: A) Se puede usar else: tras los bloques try/except B) El bloque finally: se ejecuta siempre, incluso después de return en try C) Un except sin especificar tipo captura todas las excepciones, incluidas KeyboardInterrupt D) No es posible encadenar varios tipos de excepción en un mismo except
D No es posible encadenar varios tipos de excepción en un mismo except
315
¿Cómo defines una función anónima que eleva al cuadrado su argumento? A) square = lambda x: x ** 2 B) def square(x): return x^2 C) square = lambda x: x^2 D) def square = lambda x: x ** 2
A square = lambda x: x ** 2
316
Tienes tablas clientes(id, nombre) y pedidos(id, cliente_id, total). ¿Consulta que liste todos los clientes aunque no tengan pedidos? A) SELECT * FROM clientes JOIN pedidos ON id = cliente_id; B) SELECT * FROM clientes LEFT JOIN pedidos ON id = cliente_id; C) SELECT * FROM pedidos RIGHT JOIN clientes ON cliente_id = id; D) B y C son equivalentes
D B y C son equivalentes
317
¿Cuál añade un índice sobre la columna email de la tabla usuarios? A) CREATE INDEX ON usuarios (email); B) CREATE INDEX idx_email ON usuarios (email); C) ALTER TABLE usuarios ADD INDEX (email); D) Todas las anteriores son sintaxis válidas en SQL estándar
B CREATE INDEX idx_email ON usuarios (email);
318
¿Qué hace grep -R "error" /var/log? A) Busca la palabra “error” en /var/log y subdirectorios recursivamente B) Reemplaza “error” por nada en /var/log C) Muestra sólo nombres de fichero D) Busca en /var pero no en subdirectorios
A Busca la palabra “error” en /var/log y subdirectorios recursivamente
319
En un script Bash, ¿qué imprime $#? A) El nombre del script B) Número de parámetros posicionales C) Todos los parámetros concatenados D) Error de sintaxis
B Número de parámetros posicionales
320
¿Cómo rediriges tanto la salida estándar como la de error de un comando a un fichero salida.log? A) comando > salida.log 2>&1 B) comando &> salida.log C) comando > salida.log D) A y B son correctos
D A y B son correctos
321
¿Cuál de los siguientes NO es un tipo de dato básico en Python? a) int b) float c) string d) array
D array
322
¿Cuál es la salida del siguiente código Python? x = 5 if x > 10: print("Mayor que 10") elif x > 5: print("Mayor que 5") else: print("Menor o igual a 5") a) Mayor que 10 b) Mayor que 5 c) Menor o igual a 5 d) No imprime nada
C Menor o igual a 5
323
¿Qué valor devuelve la siguiente función cuando se llama con func(4)? def func(n): if n <= 1: return 1 else: return n * func(n-1) a) 4 b) 24 c) 16 d) Error de recursión
B 24 func(4) → 4 * func(3) → 4 * (3 * func(2)) → 4 * (3 * (2 * func(1))) → 4 * (3 * (2 * 1)) → 4 * (3 * 2) → 4 * 6 → 24
324
¿Cuál es la forma correcta de manejar excepciones en Python? A) try: # código que puede generar una excepción catch (Exception e): # manejo de la excepción B) try: # código que puede generar una excepción except Exception as e: # manejo de la excepción C) try: # código que puede generar una excepción error Exception as e: # manejo de la excepción D) catch: # código que puede generar una excepción except Exception as e: # manejo de la excepción
B try: # código que puede generar una excepción except Exception as e: # manejo de la excepción
325
¿Qué línea de código importa correctamente la función randint del módulo random? a) import random.randint b) from random import randint c) include random.randint d) using randint from random
B from random import randint
326
¿Cuál es la forma correcta de abrir un archivo para escritura en Python? a) file = open("archivo.txt", "r") b) file = open("archivo.txt", "w") c) file = read("archivo.txt") d) file = write("archivo.txt")
B file = open("archivo.txt", "w")
327
¿Cuál de las siguientes opciones crea correctamente un DataFrame de pandas? A) import pandas as pd df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) B) import pandas as pd df = pd.createFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) C) import pandas df = pandas.createDataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) D) from pandas import df df = df({"A": [1, 2, 3], "B": [4, 5, 6]})
A import pandas as pd df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
328
¿Cuál es el resultado de la siguiente operación de cadenas en Python? "Hola, {}!".format("mundo") a) "Hola, {}!" b) "Hola, mundo!" c) Error, falta un argumento d) "Hola, {mundo}!"
B "Hola, mundo!"
329
¿Qué define correctamente una clase con un constructor en Python? A) class Persona: constructor(self, nombre): self.nombre = nombre B) class Persona: def __init__(self, nombre): self.nombre = nombre C) class Persona: def constructor(self, nombre): self.nombre = nombre D) class Persona: def Persona(self, nombre): self.nombre = nombre
B class Persona: def __init__(self, nombre): self.nombre = nombre
330
¿Cuál es la sintaxis correcta para una función lambda que eleva un número al cuadrado? a) lambda x => x * x b) lambda x: x * x c) x => x * x d) lambda(x) { return x * x; }
B lambda x: x * x
331
¿Qué expresión regular coincide con cualquier cadena que contenga solo dígitos? a) \d+ b) [0-9] c) \d* d) ^\d+$
D ^\d+$
332
¿Cuál es el comando correcto para crear un entorno virtual en Python? a) python -m venv myenv b) pip install venv myenv c) virtualenv create myenv d) python create venv myenv
A python -m venv myenv
333
¿Cuál es el código correcto para realizar una solicitud GET a una API web usando la biblioteca requests? A) import requests response = requests.get("https://api.example.com/data") data = response.json() B) import request response = request.get("https://api.example.com/data") data = response.json() C) import requests response = requests.fetch("https://api.example.com/data") data = response.json() D) from urllib import request response = request.urlopen("https://api.example.com/data") data = response.json()
A import requests response = requests.get("https://api.example.com/data") data = response.json()
334
¿Qué hace el siguiente comando en Linux? command1 | command2 a) Ejecuta command1 y command2 en paralelo b) Ejecuta command2 solo si command1 falla c) Pasa la salida de command1 como entrada a command2 d) Ejecuta command1 y luego command2 independientemente
C Pasa la salida de command1 como entrada a command2
335
¿Qué hace el siguiente script Bash? #!/bin/bash for i in {1..5} do echo "Número: $i" done a) Imprime "Número: {1..5}" b) Imprime "Número: i" cinco veces c) Imprime "Número: 1", "Número: 2", ..., "Número: 5" d) Genera un error de sintaxis
C Imprime "Número: 1", "Número: 2", ..., "Número: 5"
336
¿Cuál es la forma correcta de definir una variable de entorno en Bash? a) var = value b) set var = value c) var=value d) export var = value
C var=value
337
¿Cuál es la sintaxis correcta para unir dos tablas en SQL? a) SELECT * FROM tabla1 UNION tabla2 ON tabla1.id = tabla2.id; b) SELECT * FROM tabla1 JOIN tabla2 WHERE tabla1.id = tabla2.id; c) SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.id = tabla2.id; d) SELECT * FROM tabla1, tabla2 WHERE JOIN tabla1.id = tabla2.id;
C SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.id = tabla2.id;
338
¿Cuál es el tipo de dato de la variable resultado en el siguiente código? a = 5 b = 2.5 resultado = a + b a) int b) str c) float d) list
C float
339
¿Qué imprimirá el siguiente código? mi_lista = [10, 20, 30, 40, 50] print(mi_lista[1:3]) a) [10, 20] b) [20, 30] c) [20, 30, 40] d) [10, 20, 30]
B [20, 30]
340
¿Cuál es la forma correcta de abrir un archivo llamado datos.txt en modo lectura en Python, asegurándose de que se cierre automáticamente? a) file = open("datos.txt", "r") b) with open("datos.txt", "r") as file: c) file = open("datos.txt") d) read("datos.txt")
B with open("datos.txt", "r") as file:
341
¿Qué estructura de datos usarías en Python para almacenar pares clave-valor únicos? a) list b) tuple c) set d) dict (diccionario)
D dict (diccionario)
342
Considera la siguiente función: def calcular_iva(precio): iva = 0.21 return precio * (1 + iva) total = calcular_iva(100) print(total) ¿Qué valor se imprimirá? a) 100 b) 21.0 c) 121.0 d) Error
C 121.0
343
¿Cómo obtendrías el primer argumento pasado a un script de Python desde la línea de comandos? (Asumiendo que el script se llama mi_script.py y se ejecuta como python mi_script.py argumento1 argumento2) a) sys.argv[0] b) sys.argv[1] c) args[0] d) argv[1]
B sys.argv[1]
344
¿Qué hace el siguiente bucle? numeros = [1, 2, 3, 4, 5] suma = 0 for n in numeros: if n % 2 == 0: suma += n print(suma) a) Suma todos los números de la lista. b) Suma los números impares de la lista. c) Suma los números pares de la lista. d) Imprime la lista de números.
C Suma los números pares de la lista.
345
¿Cuál de las siguientes opciones crea una lista con los cuadrados de los números del 0 al 4 utilizando una "list comprehension"? a) cuadrados = [x * x for x in range(4)] b) cuadrados = [x ^ 2 for x in range(5)] c) cuadrados = [x * x for x in range(5)] d) cuadrados = {x * x for x in range(5)}
C cuadrados = [x * x for x in range(5)]
346
¿Qué cláusula SQL se utiliza para filtrar los resultados de una consulta basándose en una condición específica? a) FILTER BY b) WHERE c) HAVING d) CONDITION
B WHERE
347
¿Qué comando de Linux usarías para listar el contenido de un directorio, incluyendo los archivos ocultos y mostrando detalles (permisos, propietario, tamaño, fecha)? a) ls -a b) list -all c) dir /a /l d) ls -al
D ls -al
348
En un script Bash, ¿cómo asignarías el valor "hola mundo" a una variable llamada mensaje? a) let mensaje = "hola mundo" b) mensaje = "hola mundo" c) set mensaje = "hola mundo" d) var mensaje = "hola mundo"
B mensaje = "hola mundo"
349
¿Qué hace el siguiente comando Bash? grep "error" log.txt | wc -l a) Busca la palabra "error" en el archivo log.txt y muestra las líneas que la contienen. b) Cuenta el número de líneas en el archivo log.txt. c) Busca la palabra "error" en el archivo log.txt y cuenta cuántas líneas contienen esa palabra. d) Escribe la palabra "error" y el número de líneas de log.txt en un archivo.
C Busca la palabra "error" en el archivo log.txt y cuenta cuántas líneas contienen esa palabra.