Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Timestamp 기대 조건과 시간 경계

Timestamp 기대 조건은 Timestamp 열에 적용하며 Date 열은 지원하지 않습니다. 정적 시각은 ISO8601 문자열이나 Python datetime으로 지정할 수 있고 시간대가 명확해야 합니다.

고정 시각과 비교

from datetime import datetime, timezone
from transforms import expectations as E

strictly_after = E.col("timestamp").is_after("2020-12-14T11:32:23+0000")
strictly_before = E.col("timestamp").is_before(
    datetime(2017, 11, 28, 23, 55, 59, 342380, tzinfo=timezone.utc)
)
at_or_after = E.col("timestamp").is_on_or_after("2020-12-14T11:32:23+0000")
at_or_before = E.col("timestamp").is_on_or_before("2020-12-14T11:32:23+0000")

is_after와 is_before는 경계를 포함하지 않고, is_on_or_after와 is_on_or_before는 포함합니다.

정적 시각 인자에 datetime.now()에서 만든 값을 넣는 방식은 지원하지 않습니다. 결과가 경고 없이 잘못될 수 있고 Data Health와 다른 메시지에 실제로 의도한 비교 시각이 표시되지 않을 수 있습니다. 실행 시점을 기준으로 검사하려면 아래 상대 시간 API를 사용합니다.

다른 Timestamp 열과 비교

다른 열 이름과 선택적인 정수 초 오프셋을 지정합니다. 비교식은 항상 첫 번째 열 OP (두 번째 열 + 오프셋)입니다.

표현식조건
E.col("timestamp").is_after_col("second_timestamp")첫 열이 둘째 열보다 늦음
E.col("timestamp").is_on_or_after_col("second_timestamp")첫 열이 둘째 열과 같거나 늦음
E.col("timestamp").is_before_col("second_timestamp", 3600)첫 열이 둘째 열에 1시간을 더한 값보다 빠름
E.col("timestamp").is_on_or_before_col("second_timestamp", -7200)첫 열이 둘째 열에서 2시간을 뺀 값과 같거나 빠름

양수와 음수 오프셋은 비교 대상인 두 번째 열에 더해집니다. 이를 두 열의 순서나 뺄셈 방향을 바꾸는 인자로 해석하지 않습니다.

검사 실행 시점에 대한 상대 비교

정수 초 또는 Python timedelta로 양의 오프셋을 지정합니다. 음수 오프셋이 필요하면 두 API 중 반대 방향을 선택합니다.

메서드비교할 값
.timestamp_offset_from_current_time()timestamp - 검사 시각
.timestamp_offset_to_current_time()검사 시각 - timestamp

메서드 뒤에 일반 비교 연산자를 연결합니다. 검사 생성과 실행 시각에 차이가 있어 정밀도는 몇 분 수준이며, 실제 사용한 시각은 검사 실행 후 Expectations 결과에 표시됩니다.

from datetime import timedelta
from transforms import expectations as E

A = E.col("timestamp").timestamp_offset_from_current_time().lt(3600)
B = E.col("timestamp").timestamp_offset_from_current_time().gt(timedelta(hours=2))
C = E.col("timestamp").timestamp_offset_to_current_time().lt(5400)
D = E.col("timestamp").timestamp_offset_to_current_time().gt(timedelta(hours=2))
  • A는 미래 방향 차이가 1시간 미만인지 확인합니다. 과거 시각의 차이는 음수여서 통과합니다.
  • B는 검사 시각보다 2시간을 초과하여 미래인지 확인합니다.
  • C는 과거 방향 차이가 90분 미만인지 확인합니다. 미래 시각의 차이는 음수여서 통과합니다.
  • D는 검사 시각보다 2시간을 초과하여 과거인지 확인합니다.

인수는 양수지만 실제로 비교하는 차이가 음수가 될 수 있습니다. 메서드 이름만으로 반대 방향의 시각을 자동 제외하지 않습니다.

경계의 예

같은 시간대의 1월 1일 16시를 정확한 설명용 기준 시각으로 정하면 다음과 같습니다.

검사13시14시15시16시17시18시19시
A통과통과통과통과실패실패실패
B실패실패실패실패실패실패통과
C실패실패통과통과통과통과통과
D통과실패실패실패실패실패실패

gt와 lt는 엄격한 비교입니다. B의 18시와 D의 14시는 정확히 2시간이므로 실패합니다. A의 17시도 정확히 1시간이므로 실패합니다. 경계를 포함하려면 gte나 lte를 사용합니다.

최소/최대와 그룹별 시각

Timestamp 비교 대부분은 열의 최소/최대 속성과 그룹별 속성에도 적용할 수 있습니다.

from datetime import timedelta
from transforms import expectations as E

latest_after_boundary = (
    E.col("timestamp").max_value().is_after("2020-12-14T12:23:50+0000")
)
oldest_within_day = (
    E.col("timestamp").min_value()
    .timestamp_offset_to_current_time().lt(timedelta(days=1))
)
latest_per_category_after_60_days = (
    E.group_by("category")
    .col("timestamp")
    .max_value()
    .timestamp_offset_from_current_time()
    .gt(timedelta(days=60))
)

마지막 조건은 분류마다 최신 시각이 검사 시점보다 60일을 초과하여 미래인지 확인합니다. 상대 인자의 timedelta는 고정 기간이며 달력상 두 달과 같지 않습니다. 달력 월 수를 직접 받는 인자는 제공하지 않습니다.