Read line-based text files with line numbers and efficient subset extraction. Supports glob patterns, line selection, and context lines around matches.
Maintainer(s):
teaguesterling
Installing and Loading
INSTALL read_lines FROM community;
LOAD read_lines;
Example
-- Read all lines from a file
SELECT * FROM read_lines('server.log');
-- Read specific lines (positional argument)
SELECT * FROM read_lines('server.log', '100-200');
-- Read lines with context around matches
SELECT * FROM read_lines('error.log', 42, context := 3);
-- Path-embedded line selection
SELECT * FROM read_lines('error.log:42 +/-3');
-- Last 10 lines (from-end syntax)
SELECT * FROM read_lines('app.log', '+10-');
-- Glob pattern to read from multiple files
SELECT * FROM read_lines('logs/*.log')
WHERE content LIKE '%ERROR%';
-- Parse lines from a string
SELECT * FROM parse_lines('line1
line2
line3');
About read_lines
The read_lines extension provides functions for reading line-based text files with precise control over which lines to extract.
Functions:
read_lines(path)- Read all lines from file(s) with glob supportread_lines(path, lines)- Read selected lines (positional argument)read_lines_lateral(path, lines)- Lateral join variant for file paths from table columnsparse_lines(text, ...)- Parse lines from a string
Output Schema: | Column | Type | Description | |——–|——|————-| | line_number | BIGINT | 1-indexed line number | | content | VARCHAR | Line content (preserves original line endings) | | byte_offset | BIGINT | Byte position of line start | | file_path | VARCHAR | Source file path (read_lines only) |
Line Selection:
- Single line:
42orlines := 42 - Range:
'100-200'(inclusive) - List:
[1, 5, 10] - With context:
'42 +/-3' - From end:
'+10-'(last 10 lines),'+5'(5th from end) - Path-embedded:
'file.py:42 +/-3' - Struct:
{start: 100, stop: 200}or{line: 42, context: 3}
Context Lines:
before := N- Include N lines before each matchafter := N- Include N lines after each matchcontext := N- Shorthand for both before and after
Use Cases:
- Extract specific lines from log files
- Get error lines with surrounding context
- Process multiple files with glob patterns
- Parse multi-line string columns
Added Functions
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| parse_lines | table | NULL | NULL | |
| read_lines | table | NULL | NULL | |
| read_lines_lateral | table | NULL | NULL |